SQL错误1452:无法添加或更新子行

时间:2014-04-28 15:18:17

标签: mysql sql reference key alter

我正在尝试将一个外键添加到一个名为OrdersTbl的现有表中。我添加了一个名为ApprovedBy的新列,如下所示:

ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;

之后,我尝试将其设置为外键:

ALTER TABLE OrdersTbl
ADD CONSTRAINT ApprovedByEmp FOREIGN KEY (ApprovedBy)
REFERENCES EmployeesTbl(EmployeeID);

但我一直在

  

错误1452:无法添加或更新子行

我做错了什么?我应该将字段ApprovedBy设置为FOREIGN KEY吗?

2 个答案:

答案 0 :(得分:1)

定义时

 ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;

然后ApprovedBy不能是null。将设置默认值0

然后将外键应用于EmployeesTbl。这意味着数据库会检查ApprovedBy仅包含EmployeesTbl中的值。但事实并非如此。值为0

因此,null允许ApprovedBy并相应地设置值,或者在添加外键之前设置正确的值。

答案 1 :(得分:0)

我的错误。看来我必须手动更改表OrdersTbl中的值。换句话说,在添加ApprovedBy列时,为每个条目设置的值当然是' 0' 0' 0默认情况下。由于没有员工的ID为' 0'它失败并发送了该错误。 手动将每个条目中的值更改为' 1' (或表EmployeesTbl中的任何其他现有ID)问题已修复。