MySQL:无法添加外键约束错误

时间:2017-04-22 07:05:32

标签: mysql sql

第一个表是LocationTime表,第二个表是Student表。 我正在使用' ALTER'添加外键。但我得到了以下错误。为什么我收到错误?

  

无法添加外键约束错误

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

2 个答案:

答案 0 :(得分:0)

问题在于Quarter复合键的成员CouresNQuarterDayTime构成主键对于LocationTime表)。无法在另一个仅与Quarter关联的表上声明外键约束,它还应包括复合键的其他部分。解决问题的一种可能方法是将其他列声明为主键。此外,我没有看到您不使用具有自动生成的INT(IDENTITY)的列作为主键或具有自动生成的GUID的列的原因。

答案 1 :(得分:0)

如果您尝试INSERT a value进入表table_1中不存在的表table_2,那么您将收到错误。

由于您在table_1字段上有外键,因此same value中必须有table_2

  

查看non-working demo。此演示显示Fabricantes表中不存在Codigo的值,因此它会抛出错误消息。这是一个working demo,表示该值首先出现在表格中。