2014-05-17 5 views
1

Tout d'abord, bien sûr, j'ai cherché d'autres messages sur ce problème (il y en a beaucoup) mais je dois dire que rien n'a fonctionné jusqu'à présent pour moi. La seule chose que je n'ai pas essayée était de désactiver le contrôle étranger.Problèmes avec MYSQL Erreur 150

Mon problème: Quand j'essaye de créer deux tables simples j'ai eu l'erreur 150 et je ne peux pas comprendre pourquoi.

code Mon jusqu'à présent:

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; 

Mon mainproblem est de comprendre le problème. J'ai une base de données beaucoup plus grande qui est presque identique mais il n'y a pas de problèmes. Voici le code de la base de données qui fonctionne bien:

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; 

merci pour votre aide.

+0

Votre clé étrangère doit être la clé primaire dans la table de référence. Cette ligne provoque votre problème: 'clé étrangère (SENSOR_TYP) références SENSOR (SENSOR_EINHEIT)' – Uriil

Répondre

0

Votre table SENSOR_DATEN déclare une clé étrangère qui référence la colonne SENSORSENSOR_EINHEIT. Cette colonne n'est pas définie comme étant unique et ne peut donc pas être pointée par une clé étrangère. Par conséquent, votre échec.

Vous pouvez modifier la déclaration de SENSOR pour rendre la colonne unique:

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

Ou bien, l'appliquer après factum à une table existante:

alter table SENSOR add constraint SENSOR_EINHEIT_UNQ unique(SENSOR_EINHEIT); 
+0

Merci beaucoup! ce fixxed mon problème. – Angl0r

Questions connexes