繁体   English   中英

表创建过程中出现MYSQL Error 150的问题

[英]Problems with MYSQL Error 150 during table creation

我查阅了关于这个问题的其他帖子(有很多),但我不得不说到目前为止对我来说没有任何效果。 唯一没有尝试的是禁用外部检查。

我的问题:
当我尝试创建两个简单的表时,我收到错误 150,我不知道为什么。

到目前为止我的代码:

drop table if exists SENSOR;
drop table if exists SENSOR_DATEN;


create table SENSOR (
SENSOR_ID int not null auto_increment,
SENSOR_NAME varchar(100),
SENSOR_POSX float not null,
SENSOR_POSY float not null,
SENSOR_EINHEIT varchar(100) not null,
primary key (SENSOR_ID)
);

commit;

create table SENSOR_DATEN (
SENSOR_DATEN_ID int not null auto_increment,
SENSOR_ID int not null,
SENSOR_DATEN_WERT varchar(100),
SENSOR_TYP varchar(100) not null,

primary key (SENSOR_DATEN_ID),
foreign key(SENSOR_ID) references SENSOR(SENSOR_ID),
foreign key(SENSOR_TYP) references SENSOR(SENSOR_EINHEIT)   
);
commit;

我的主要问题是理解问题。 我得到了一个更大的数据库,它几乎相同,但没有问题。 这是工作正常的数据库代码:

drop table if exists AUSGELIEHEN_FILM;
drop table if exists AUSGELIEHEN_SPIEL;
drop table if exists KUNDE;
drop table if exists FILM;
drop table if exists SPIEL;

create table KUNDE (
KUNDE_ID int not null auto_increment,
KUNDE_VNAME varchar(100),
KUNDE_NAME varchar(100),
KUNDE_ADRESSE varchar(100),
KUNDE_PLZ int not null,
primary key (KUNDE_ID)
);

create table FILM (
FILM_ID int not null auto_increment,
FILM_NAME varchar(100),
FILM_GENRE varchar(50),
FILM_FSK int not null,
FILM_BEWERTUNG int not null,
FILM_ANZAHL int not null,
FILM_MEDIUM varchar(50),

primary key (FILM_ID)
);

create table SPIEL (
SPIEL_ID int not null auto_increment,
SPIEL_NAME varchar(100),
SPIEL_GENRE varchar(50),
SPIEL_FSK int not null,
SPIEL_BEWERTUNG int not null,
SPIEL_ANZAHL int not null,
SPIEL_PLATFORM varchar(50),

primary key (SPIEL_ID)
);

create table AUSGELIEHEN_FILM (
    AUSGELIEHEN_FILM_ID int not null auto_increment,
    KUNDE_ID int not null,
    FILM_ID int not null,
    AUSGELIEHEN_ANZAHL int not null,
    
    primary key(AUSGELIEHEN_FILM_ID),
    foreign key(KUNDE_ID) references KUNDE(KUNDE_ID),
    foreign key(FILM_ID) references FILM(FILM_ID)
    );
    
    create table AUSGELIEHEN_SPIEL(
    AUSGELIEHEN_SPIEL_ID int not null auto_increment,
    KUNDE_ID int not null,
    SPIEL_ID int not null,
    AUSGELIEHEN_ANZAHL int not null,
    
    primary key(AUSGELIEHEN_SPIEL_ID),
    foreign key(KUNDE_ID) references KUNDE(KUNDE_ID),
    foreign key(SPIEL_ID) references SPIEL(SPIEL_ID)
    );
commit;

您的表SENSOR_DATEN声明了一个引用SENSORSENSOR_EINHEIT的外键。 此列未定义为唯一的,因此不能有指向它的外键。 因此,你的失败。

您可以修改SENSOR的声明以使该列唯一:

create table SENSOR (
SENSOR_ID int not null auto_increment,
SENSOR_NAME varchar(100),
SENSOR_POSX float not null,
SENSOR_POSY float not null,
SENSOR_EINHEIT varchar(100) not null,
primary key (SENSOR_ID),
unique (SENSOR_EINHEIT)
);

或者,将其事后应用于现有表:

alter table SENSOR add constraint SENSOR_EINHEIT_UNQ unique(SENSOR_EINHEIT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM