我正在尝试从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的结构
table2的结构
答案 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)
你的表有一些数据。检查table2
。bus_id
中存储的所有值是否正确;所有这些值都必须在table1
。bus_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语句。