【问题标题】:SQL Error 1452: Cannot add or update child rowSQL 错误 1452:无法添加或更新子行
【发布时间】:2014-04-28 15:18:17
【问题描述】:

我正在尝试将外键添加到已存在的名为 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 吗?

【问题讨论】:

标签: mysql sql reference key alter


【解决方案1】:

定义时

 ALTER TABLE OrdersTbl ADD ApprovedBy BIGINT UNSIGNED NOT NULL;

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

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

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

【讨论】:

  • 谢谢 :) 和我猜想的一样。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多