2014-05-17 3 views
1

Прежде всего, конечно, я искал другие сообщения об этой проблеме (их много), но я должен сказать, что до сих пор ничего не было сделано для меня. Единственное, что я не пробовал, - отключить внешний чек.Проблемы с ошибкой MYSQL 150

Моя проблема: Когда я пытаюсь создать две простые таблицы, я получил ошибку 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; 

Мой mainproblem, чтобы понять проблему. Я получил большую базу данных, почти идентичную, но проблем нет. Вот код для базы данных, который отлично работает:

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; 

благодарит за вашу помощь.

+0

Ваш внешний ключ должен быть первичным ключом в таблице ссылок. Эта строка вызывает вашу проблему: ссылки на внешний ключ (SENSOR_TYP) SENSOR (SENSOR_EINHEIT) ' – Uriil

ответ

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); 
+0

Большое вам спасибо !!!! это исправить мою проблему. – Angl0r

Смежные вопросы