Mysql SQL错误1452:无法添加或更新子行
我正在尝试将外键添加到名为OrdersTbl的现有表中。我添加了一个名为ApprovedBy的新专栏,如下所示:Mysql SQL错误1452:无法添加或更新子行,mysql,sql,reference,key,alter,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);
ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;
之后,我尝试将其设置为外键:
ALTER TABLE OrdersTbl
ADD CONSTRAINT ApprovedByEmp FOREIGN KEY (ApprovedBy)
REFERENCES EmployeesTbl(EmployeeID);
但我一直在
错误1452:无法添加或更新子行
我做错了什么?我是否应该将字段
ApprovedBy
设置为外键?我的错误。似乎我必须手动更改表OrdersTbl中的值。换句话说,在添加ApprovedBy列时,默认情况下为每个条目设置的值当然是“0”。由于没有ID为“0”的员工,因此失败并发送了该错误。
手动将每个条目中的值更改为“1”(或表EmployeesTbl中的任何其他现有ID)后,问题已得到修复。定义时
ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;
然后,
ApprovedBy
不能为null
。默认值将设置为0
然后将外键应用于EmployeesTbl
。这意味着DB检查ApprovedBy
是否只包含员工stbl
中的值。但事实并非如此。值为0
因此,允许
ApprovedBy
的null
,并在以后相应地设置值,或者在添加外键之前设置正确的值。ApprovedBy
不能为null。当您引用另一个表时,它必须包含表employeestbl
中的值。您需要在引用或允许空值之前填充值。请阅读这里:,这里:,和这里:谢谢:)这正是我所怀疑的。