2017-04-22 57 views
0

第一個表是LocationTime表,第二個表是Student表。 我正在使用'ALTER'添加一個外鍵。但是我得到了下面的錯誤。爲什麼我會收到錯誤?MySQL:無法添加外鍵約束錯誤

無法添加外鍵約束錯誤

+---------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+---------+-------------+------+-----+---------+-------+ 
| CourseN | varchar(3) | NO | PRI | NULL |  | 
| Quarter | varchar(11) | NO | PRI | NULL |  | 
| DayTime | varchar(7) | NO | PRI | NULL |  | 
| RoomN | varchar(3) | YES |  | NULL |  | 
+---------+-------------+------+-----+---------+-------+ 

+-------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-------------+-------------+------+-----+---------+-------+ 
| studentName | varchar(15) | NO | PRI | NULL |  | 
| CourseN  | varchar(3) | NO | PRI | NULL |  | 
| Quarter  | varchar(11) | NO | PRI | NULL |  | 
+-------------+-------------+------+-----+---------+-------+ 


ALTER TABLE Student 
ADD FOREIGN KEY (Quarter) REFERENCES LocationTime (Quarter) 
ON UPDATE CASCADE ON DELETE SET NULL; 

回答

0

的問題是,Quarter是一個複合鍵CouresNQuarterDayTime形式成員爲LocationTime的主鍵表)。無法在僅與Quarter關聯的另一個表上聲明外鍵約束,還應該包括組合鍵的其他部分。解決您的問題的一種可能方法是將其他列聲明爲主鍵。此外,我沒有看到你不使用具有自動生成的INT(IDENTITY)作爲主鍵的列或具有自動生成的GUID的列的原因。

0

外鍵是不是應該在CourseN和Quarter上? 此外,在刪除時將某些值設置爲NULL - 在表中定義爲不可爲空可能不起作用!

0

如果您試圖將INSERT a value納入表table_1,表table_2中不存在那麼您將得到該錯誤。

由於在table_1字段上有外鍵,因此必須在table_2中有same value

查看non-working demo。此演示顯示Codigo的值不存在於Fabricantes表中,因此會引發錯誤消息。這是一個working demo,它顯示了該值在表格中。