无法添加外键

时间:2012-10-18 06:23:18

标签: mysql foreign-keys

我正在尝试从table2向表table1添加外键。但是我得到了这样的错误......问题是什么......帮助

Error

SQL query:

ALTER TABLE `table2` ADD FOREIGN KEY ( `bus_id` ) REFERENCES `db1`.`table1` (
`bus_id`
) ON DELETE CASCADE ON UPDATE CASCADE ;

MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`db1`.`#sql-664_e2`, CONSTRAINT `#sql-664_e2_ibfk_1` FOREIGN KEY (`bus_id`) REFERENCES `table1` (`bus_id`) ON DELETE CASCADE ON UPDATE CASCADE) 

table1的结构

enter image description here

table2的结构

enter image description here

3 个答案:

答案 0 :(得分:1)

要获得更多信息,请执行以下命令:

SHOW ENGINE INNODB STATUS;

我预计数据不匹配,例如。 table2包含在bus1id列中的值,该值在table1中找不到。

试试这个:

SELECT DISTINCT bus_id FROM table2 WHERE 
    bus_id NOT IN (SELECT bus_id FROM table1)

还要确保两个表都使用InnoDB作为存储引擎。

答案 1 :(得分:1)

你的表有一些数据。检查table2bus_id中存储的所有值是否正确;所有这些值都必须在table1bus_id

运行此查询以查看bus_id中的错误table2值:

SELECT t2.bus_id AS inconsistent_bus_id FROM table2 t2
LEFT JOIN table1 t1
  ON t1.bus_id = t2.bus_id
WHERE t1.bus_id IS NULL

table2删除此记录,或将此bus_id添加到table1。然后尝试再次创建外键。

答案 2 :(得分:1)

我在ALTER声明中看不到任何错误。主要原因可能是table2上已存在bus_id table1未存在的记录。因此,您可以做的最好的解决方案是清空第一个table2并再次运行alter语句。