gpt4 book ai didi

mysql - 如何在自引用表中添加记录?

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:39 25 4
gpt4 key购买 nike

我是 MySql 的菜鸟。我想创建以下自引用表:

EMPLOYEE
+-----+------+------+
|Name |E-ID |M-ID |
+-----+------+------+
|ABC |12345 |67890 |
|DEF |67890 |12345 |
+-----+------+------+

我使用以下命令:

CREATE TABLE EMPLOYEE (
NAME VARCHAR(20) ,
E-ID CHAR(6) NOT NULL ,
M-ID CHAR(6) NULL ,
PRIMARY KEY (E-ID) ,
FOREIGN KEY (M-ID) REFERENCES EMPLOYEE(E-ID)
);

现在我的问题是,如何输入这两条记录?我的意思是,每次外国约束都会失败。我试着输入:

INSERT INTO EMPLOYEE VALUES('12345','67890');

我也试过:

INSERT INTO EMPLOYEE VALUES('12345','67890'),('67890','12345');

以上两个命令都失败了。给出错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails BLAH BLAH

伙计们,实际上我正在尝试实现以下 ppt 第 25 号幻灯片中给出的表格:The Relational Data Model and Relational Database Constraints

约束是:

  1. 员工的 SUPERSSN 引用员工的 SSN。
  2. 部门的 MGRSSN 引用员工的 SSN。
  3. EMPLOYEEE 的 DNO 引用了 DEPARTMENT 的 DNumber。

创建表后,如何添加记录?它总是会失败外键约束。

最佳答案

由于 MySQL 不支持可延迟约束(这是此类问题的“自然解决方案”),因此您需要分两步完成此操作;

INSERT INTO employee (name, `E-ID`) values ('Arthur', '123456');
INSERT INTO employee (name, `E-ID`) values ('Ford', '67890');
UPDATE employee
SET `M-ID` = '67890'
WHERE `E-ID` = '123456';

UPDATE employee
SET `M-ID` = '123456'
WHERE `E-ID` = '67890';

虽然你的循环引用对我来说听起来很奇怪。一名员工是一名员工的经理,而另一名员工又是他的经理?

请允许我对您的表定义发表两点意见:

  • 避免使用需要引用标识符的特殊字符的列(或表名)。使用 E_ID 而不是 E-ID 从长远来看会为您省去一些麻烦
  • 如果您的员工 ID 可以短于 6 个字符,那么您很可能希望使用 VARCHAR(6) 而不是 CHAR(6) CHAR 数据类型的值。

关于mysql - 如何在自引用表中添加记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com