0

我正在尝试将外键添加到表table2table1。但是我遇到了这样的错误...问题是什么...帮助

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) 

表1的结构

在此处输入图像描述

表2的结构

在此处输入图像描述

4

3 回答 3

1

要获取更多信息,请运行以下命令:

SHOW ENGINE INNODB STATUS;

我希望存在数据不匹配,例如。table2 包含在 table1 中找不到的列 bus_id 中的值。

试试这个:

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

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

于 2012-10-18T06:27:44.177 回答
1

你的表有一些数据。检查存储在table2. bus_id是正确的; 所有这些值都必须在table1. bus_id.

运行此查询以查看错误bus_idtable2

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_idtable1。然后尝试再次创建外键。

于 2012-10-18T06:29:16.000 回答
1

我看不出你的ALTER陈述有任何错误。主要原因是可能已经有记录存在,table2bus_id不存在table1。因此,您可以做的最佳解决方案是清空第一个 table2 并再次运行 alter 语句。

于 2012-10-18T06:30:49.840 回答