#1452 - 无法添加或更新子行:外键约束失败(
robot
。specifications
,CONSTRAINTspecifications_ibfk_1
FOREIGN KEY(Product_code
)REFERENCES {{ 1}}(product shipment
))
我是新手,我真的不知道我在这里出去了什么!? :oo
我几乎100%确定我在其他表中正确定义了我的主键和外键..
有人能用英语母语告诉我,这里我做错了什么?
答案 0 :(得分:0)
对表中不存在的值的引用可能会导致此问题。在包含数据的表中设置外键约束时,我不止一次遇到过它。
此问题的解决方案是查找对不存在的行的引用并删除它们。完成此操作后,如果语法和表定义正确,则约束应该起作用。
Table : Country
cid | Name | Comment
---------------------------------
1 | Japan | xyz
2 | USA | pqr
3 | India | abc
4 | Germany | lmn
30 | France | pqr
Table : Language
lid | country_id | lang_name
---------------------------------
101 | 1 | Japanese
901 | 2 | Engligh
291 | 3 | Hindi
678 | 4 | German
283 | 30 | French
827 | 9 | Russian
我们可以看到语言#827引用了国家/地区#9,但我们的国家/地区表没有此值。没有[9 |俄罗斯| ghk]那里。
尝试创建外键约束将失败,并显示以下错误
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test_db`.`#sql-4ae_1f19e`, CONSTRAINT `country_ID_fk` FOREIGN KEY (`country_id`) REFERENCES `country` (`cid`))
解决方案:我们需要找到所有不存在的引用并手动删除它们。小桌子很简单。对于包含大量数据的表,使用以下查询来查找所有不存在的引用:
select country_id,(select count(*) from country where country_id = cid) from language WHERE country_id*(select count(*) from country where country_id = cid) = 0 ;
这将列出所有不存在的引用。删除引用后,可以使用以下命令创建约束:
ALTER TABLE language ADD CONSTRAINT country_if_fk FOREIGN KEY (country_id) REFERENCES country(`cid`);