我正在尝试将一个外键添加到一个名为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吗?
答案 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)问题已修复。