MySQL报错1452:插入employee表数据触发外键约束失败问题咨询
问题原因分析
错误详情:Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (
smolcompany.employee, CONSTRAINTemployee_fk2FOREIGN KEY (DeptID) REFERENCESdepartment(DeptID) ON DELETE RESTRICT ON UPDATE CASCADE)
该报错为外键约束校验失败导致,触发原因是employee_fk2约束要求employee表的DeptID字段值必须是department表中已存在的DeptID值。本次插入的员工数据用到了101、102、103三个部门ID,此时department表无对应记录,因此插入失败。
除此之外,你的表结构存在循环外键依赖:
- employee表的
DeptID依赖department表的DeptID - department表的
ManagerID又依赖employee表的EmpID
常规按表顺序插入的方式无法同时满足两个外键约束,需要特殊处理。
解决方案
推荐通过临时关闭外键校验的方式完成插入,操作步骤如下:
- 执行语句临时关闭外键检查:
SET FOREIGN_KEY_CHECKS = 0; - 执行预设的INSERT语句插入所有员工数据:
INSERT INTO employee VALUES (4283, 'Sarim Mansoor', 'M', 27, 'Mont Kiara', NULL, 102), (4465, 'Teh Yi Heng', 'M', 23, 'Cyberjaya', NULL, 101), (4123, 'Thamal Kishen', 'F', 47, 'Petaling Jaya', 4283, 102), (3978, 'Mike Ross', 'M', 26, 'Mont Kiara', NULL, 103), (5240, 'Martha Arnold', 'F', 27, 'Mont Kiara', 4465, 101);
- 插入对应三个部门的记录,示例语句如下(可根据实际业务调整字段值,需满足
DeptBlock只能为A/B/C的检查约束):
INSERT INTO department VALUES (101, '技术部', 'A', 3, 4465, '2023-01-01'), (102, '市场部', 'B', 2, 4283, '2023-01-01'), (103, '人事部', 'C', 1, 3978, '2023-01-01');
- 重新开启外键检查,恢复约束校验:
SET FOREIGN_KEY_CHECKS = 1;
内容的提问来源于stack exchange,提问作者Faith
相关产品推荐
相关产品推荐

