MySQL Error 1452 无法添加或更新子行外键约束报错问题求助
错误原因及修复方案
MySQL 1452错误本质是插入子表的外键字段值在关联的父表中不存在,你的两处报错对应两个层级的关联错误,具体问题和修改点如下:
第一个报错(插入Truck表触发)的问题
你存在两处不匹配:
- 字段长度不匹配
父表TruckModel中TruckMakeID定义为char(5)、TruckModelID定义为char(4),但子表Truck中对应外键字段定义为TruckMakeID char(3)、TruckModelID char(3),长度不足导致值存储截断,无法和父表匹配。 - 插入值不匹配
TruckModel里存储的TruckMakeID值为TMI1、TMI2……TMI9,但你插入Truck表时填的TruckMakeID是TM1、TM2……TM9,少了中间的I,父表中完全不存在这些值。
修复方法:
- 先修改
Truck表的字段定义,和父表保持一致:ALTER TABLE Truck MODIFY COLUMN TruckMakeID char(5), MODIFY COLUMN TruckModelID char(4);
- 替换所有插入
Truck表的TruckMakeID值:把TM1改为TMI1、TM2改为TMI2,以此类推到TM9改为TMI9即可。
第二个报错(插入Allocation表触发)的问题
因为第一步插入Truck表的操作全部失败,Truck表里没有任何你插入的TruckVINNum记录,所以Allocation表插入时外键关联Truck表的TruckVINNum找不到对应值,自然报错。
修复方法:把第一个报错的问题修复完,保证
Truck表数据全部插入成功后,再执行Allocation表的插入操作即可。
其他隐藏隐患
你Service表的TransportID定义为char(2),但Allocation表关联的TransportID定义为char(3),字段长度不一致,后续也可能触发同类外键错误,建议同步修改长度保持一致。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

