2016-04-07 14 views
0

So versuche ich eine neue Datenbank, und diese ersten Zeilen geben Sie mirMYSQL - Kein Fremdschlüssel hinzufügen - Fehler 1215

Error 1215 - Cannot add foreign key constraint 

ich auch versucht habe zu erstellen das Update auf das Entfernen/DELETE ist in der 2. Tisch, aber es gibt immer noch die gleichen Fehler

CREATE TABLE Employee(
EID INT, 
SIN INT, 
FName VARCHAR(20) NOT NULL, 
LName VARCHAR(20) NOT NULL, 
DOB DATE, 
Position VARCHAR(20) NOT NULL, 
civicNum VARCHAR(10) NOT NULL, 
StreetName VARCHAR(20) NOT NULL, 
Telephone VARCHAR(10) NOT NULL, 
Contract VARCHAR(10) NOT NULL, 
PRIMARY KEY(EID,SIN))ENGINE=INNODB; 

CREATE TABLE FullTime(
EID INT, 
SIN INT, 
SALARY INT, 
PRIMARY KEY(EID,SIN), 
FOREIGN KEY(EID) REFERENCES Employee(EID) 
ON UPDATE CASCADE 
ON DELETE CASCADE, 
FOREIGN KEY(SIN) REFERENCES Employee(SIN) 
ON UPDATE CASCADE 
ON DELETE CASCADE)ENGINE=INNODB; 

Antwort

2

Sie haben einen zusammengesetzten Primärschlüssel, so müssen Sie alle Spalten für die Fremdschlüssel-Referenz:

FOREIGN KEY(EID, SIN) REFERENCES Employee(EID, SIN) 

Hinweis: Ich bin ein Fan von "synthetischen" Primärschlüsseln, bei denen nur eine (normalerweise automatisch inkrementierte) Spalte für den Primärschlüssel verwendet wird. Dies ist besonders nützlich, wenn eine Tabelle für Fremdschlüsselreferenzen verwendet wird.

Here ist das Beispiel in SQL Fiddle.

0

Sie haben keinen Index in Ihrer Employee-Tabelle.

Ja, Sie haben einen kombinierten Primärschlüssel bestehend aus EID und SIN - aber Sie können das nicht als Fremdschlüssel für EID verwenden.

Entweder benötigen Sie entweder einen Index für EID, oder Sie müssen Ihren Fremdschlüssel dazu verwenden, dieselbe Kombination von Spalten zu verwenden. (Letzteres könnte sinnvoller sein, wenn die andere Tabelle die Kombination bereits als Primärschlüssel verwendet.)

Verwandte Themen