MYSQL错误150的问题

时间:2014-05-17 11:28:17

标签: mysql

首先,当然我查找了其他帖子关于这个问题(有很多)但我不得不说到目前为止我没有任何工作。我唯一没试过的就是禁用外国支票。

我的问题: 当我尝试创建两个简单的表时,我得到错误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;

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的表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);