2017-04-22 60 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,它显示了该值在表格中。