MySQL错误1452:执行插入SQL脚本时外键约束失败求助
解决MySQL Error 1452外键约束失败问题
执行SQL脚本时出现错误:Error 1452: 无法添加或更新子行:外键约束失败(
aptechniy_sklad4.zayavka,CONSTRAINTzayavka-zakupivlia1FOREIGN KEY (nomer_zayavku) REFERENCESzakupivlia(nomer_zayavku) ON DELETE NO ACTION ON UPDATE NO ACTION)。执行的SQL代码:INSERT INTOaptechniy_sklad4.zayavka(nomer_zayavku,data_skaladnnia,nomer apteku,data_vukonannia) VALUES (100001, '2017-01-03', 0001, '2017-01-05')。
这个错误我之前排查过好几次,核心原因很简单:你要插入子表zayavka的外键值,在关联的父表zakupivlia里找不到匹配的记录。MySQL的外键约束就是用来保证数据完整性的,子表的外键必须对应父表已存在的主键(或唯一键)值,否则就会抛出1452错误。
下面是具体的解决步骤:
第一步:先验证父表是否存在目标记录
执行这条SQL查询,确认zakupivlia表里有没有nomer_zayavku = 100001的行:SELECT * FROM aptechniy_sklad4.zakupivlia WHERE nomer_zayavku = 100001;第二步:根据查询结果处理
- 如果查询结果为空:
- 优先选择:先往
zakupivlia表插入包含nomer_zayavku = 100001的记录,确保父表有这个值之后,再执行你原来的INSERT语句; - 特殊场景(不推荐轻易用):如果你确定这个外键约束是多余的,或者临时需要跳过约束,可以临时关闭外键检查,执行完插入再恢复:
SET FOREIGN_KEY_CHECKS = 0; -- 执行你的INSERT语句 INSERT INTO `aptechniy_sklad4`.`zayavka` (`nomer_zayavku`, `data_skaladnnia`, `nomer apteku`, `data_vukonannia`) VALUES (100001, '2017-01-03', 0001, '2017-01-05'); SET FOREIGN_KEY_CHECKS = 1;
- 优先选择:先往
- 如果查询结果有记录:
- 检查两个表的
nomer_zayavku字段类型是否完全一致(比如一个是INT,一个是VARCHAR?或者长度不一样?),类型不匹配也会触发这个错误; - 检查是否有字符大小写问题(如果字段是字符串类型的话),不过这里看起来是数字,可能性不大,但也可以留意下。
- 检查两个表的
- 如果查询结果为空:
内容的提问来源于stack exchange,提问作者Михайло
相关产品推荐
相关产品推荐

