我正在尝试向名为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吗?

最佳答案

定义时

 ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;


那么ApprovedBy不能为null。默认值将设置为0

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

因此,要么允许null用作ApprovedBy,然后在以后相应地设置值,要么在添加外键之前设置正确的值。

08-06 22:55