林開發PHP中的數據庫,我有以下兩個表格 成員表的表:MySQL的PHP創建包含外鍵只(錯誤150)
$sql_query = "CREATE TABLE Member(
ID INT(8) NOT NULL AUTO_INCREMENT,
Branch_ID INT(8) NOT NULL,
Join_Date DATE NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY (Branch_ID) REFERENCES Office(ID)
ON DELETE CASCADE ON UPDATE CASCADE)ENGINE = INNODB";
和一張桌子事件:
$sql_query = "CREATE TABLE Event(
Name CHAR(30) NOT NULL,
Date DATE NOT NULL,
Branch_ID INT(8) NOT NULL,
Description VARCHAR(50) NOT NULL,
PRIMARY KEY(Name, Date),
UNIQUE KEY (Event_Name, Event_Date),
FOREIGN KEY (Branch_ID) REFERENCES Office(ID)
ON DELETE CASCADE ON UPDATE CASCADE)ENGINE = INNODB";
最後,跟蹤哪個成員才能參加的事件,我有一個表Attends_Event:
$sql_query = "CREATE TABLE Attends_Event(
Event_Name CHAR(30) NOT NULL,
Event_Date DATE NOT NULL,
Attendee_ID INT(8) NOT NULL,
PRIMARY KEY (Event_Name, Event_Date),
INDEX Event_Name_Index (Event_Name),
INDEX Event_Date_Index (Event_Date),
FOREIGN KEY (Event_Name) REFERENCES Event(Name)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (Event_Date) REFERENCES Event(Date)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (Attendee_ID)REFERENCES Member(ID)
ON DELETE CASCADE ON UPDATE CASCADE)ENGINE = INNODB";
但是這張桌子從未被創造(Errno 150)。我看過其他類似的問題,似乎我有正確的代碼。我錯過了什麼?
好點。我還要補充一點,在自動遞增整數列形式的'Event'上的代理PK可能是一個更好的主意,因爲這會讓你在'Attends_Event'中引用更短的參考。但是,這主要是我在SQL Server中所做的,我不確定這一點是否與MySQL有任何關聯。 –
謝謝,單個外鍵而不是兩個是導致問題的原因。 – user3178645
此外,您正確使用Attendee_ID而不是事件名稱和日期。這是我的設計缺陷。最糟糕的是,邏輯是正確的,我編錯了! – user3178645