【问题标题】:MySQL Error Code: 1452. Cannot add or update a child row: a foreign key constraint failsMySQL 错误代码:1452。无法添加或更新子行:外键约束失败
【发布时间】:2021-12-28 07:56:08
【问题描述】:

我正在尝试将值插入到员工表中,但是当我尝试执行脚本时,它给了我这个错误。我做错了什么?

回应:

错误代码:1452。无法添加或更新子行:外键 约束失败(smolcompany.employee, CONSTRAINT employee_fk2 外键 (DeptID) 引用 department (DeptID) 删除 更新级联限制)

动作:

插入员工价值观(4283,'Sarim Mansoor','M',27,'Mont Kiara', NULL, 102), (4465, 'Teh Yi Heng', 'M', 23, 'Cyber​​jaya', NULL, 101), (4123, 'Thamal Kishen', 'F', 47, '八打灵再也', 4283, 102), (3978,'迈克罗斯','M',26,'Mont Kiara',NULL,103),(5240,'玛莎 Arnold, 'F', 27, 'Mont Kiara', 4465, 101)

表格:

CREATE TABLE employee 
(
EmpID INT NOT NULL,
EmpName VARCHAR(50) NOT NULL,
EmpGender CHAR(1) NOT NULL,
EmpAge INT NOT NULL,
EmpAddress VARCHAR(50) NOT NULL,
SuperID INT,
DeptID INT NOT NULL,
CONSTRAINT employee_pk PRIMARY KEY(EmpID),
CONSTRAINT employee_uk UNIQUE(EmpName),
CONSTRAINT employee_ck CHECK(EmpAge>18 AND EmpAge<100),
CONSTRAINT employee_fk1 FOREIGN KEY(SuperID) REFERENCES employee(EmpID) ON UPDATE CASCADE ON DELETE RESTRICT
);

CREATE TABLE department 
(
DeptID INT NOT NULL,
DeptName VARCHAR(50) NOT NULL,
DeptBlock CHAR(1) NOT NULL,
DeptLevel INT NOT NULL,
ManagerID INT NOT NULL,
MStartDate DATE NOT NULL,
CONSTRAINT department_pk PRIMARY KEY(DeptID),
CONSTRAINT department_uk UNIQUE(DeptName),
CONSTRAINT department_ck CHECK(DeptBlock='A' OR DeptBlock='B' OR DeptBlock='C'),
CONSTRAINT department_fk FOREIGN KEY(ManagerID) REFERENCES employee(EmpID) ON UPDATE CASCADE ON DELETE RESTRICT
);

ALTER TABLE employee ADD CONSTRAINT employee_fk2 FOREIGN KEY(DeptID) REFERENCES department(DeptID) ON UPDATE CASCADE ON DELETE RESTRICT;

价值观:

INSERT INTO employee 
VALUES
(4283, 'Sarim Mansoor', 'M', 27, 'Mont Kiara', NULL, 102),
(4465, 'Teh Yi Heng', 'M', 23, 'Cyberjaya', NULL, 101),
(4123, 'Thamal Kishen', 'F', 47, 'Petaling Jaya', 4283, 102),
(3978, 'Mike Ross', 'M', 26, 'Mont Kiara', NULL, 103),
(5240, 'Martha Arnold', 'F', 27, 'Mont Kiara', 4465, 101);

【问题讨论】:

  • Big Note 将员工的年龄存储为20 是一个糟糕的主意。他们不会总是20 而是存储他们的出生日期并在需要时计算出他们的年龄
  • 有了你的约束,你不能存储 SuperId 为 NULL 的行,因为没有 Employee 的 id 为 NULL。我认为这种约束根本没有任何意义
  • 您需要在员工之前输入部门 ID 101-103。但这看起来像环依赖,你不应该这样做,因为你需要一个事先声明给另一个,反之亦然
  • @RiggsFolly 但并非所有员工都有主管,因此其中一些保留为 NULL。请问我应该如何重写代码才能做到这一点?
  • 如果有效,您应该接受自己的答案。因此,遇到相同问题的每个人都可以遵循您的解决方案

标签: mysql mysql-error-1452


【解决方案1】:

我发现了问题,我不得不添加约束

ALTER TABLE employee ADD CONSTRAINT employee_fk2 FOREIGN KEY(DeptID) REFERENCES department(DeptID) ON UPDATE CASCADE ON DELETE RESTRICT;

只有在我创建了两个表并插入了所有值之后。谢谢大家的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2013-06-11
    • 2014-05-10
    • 2021-07-16
    • 2014-10-23
    • 2019-03-29
    • 2018-05-14
    相关资源
    最近更新 更多