表将生成,但每次我尝试将值插入表中时,我都会收到外键约束失败的 1452 错误。我想知道这个问题是否与 EMPLOYEE 表在 STORE 表中有一个 STORE_CODE 的外键有关,而 STORE 表在 EMPLOYEE 表中有一个 EMP_CODE 的外键。循环引用是这里的问题吗?
ALTER TABLE EMPLOYEE DROP FOREIGN KEY STORE_CD;
ALTER TABLE STORE DROP FOREIGN KEY REGION_CD;
ALTER TABLE STORE DROP FOREIGN KEY EMPLOYEE_CD;
DROP TABLE IF EXISTS EMPLOYEE, REGION, STORE;
CREATE TABLE EMPLOYEE (
EMP_CODE int NOT NULL PRIMARY KEY,
EMP_TITLE varchar(4),
EMP_LNAME varchar(15),
EMP_FNAME varchar(15),
EMP_INITIAL varchar(1),
EMP_DOB datetime,
STORE_CODE int NOT NULL
) Engine=InnoDB;
-- Table Region
CREATE TABLE REGION (
REGION_CODE int NOT NULL PRIMARY KEY,
REGION_DESCRIPT varchar(20)
) Engine=InnoDB;
-- Table Store
CREATE TABLE STORE (
STORE_CODE int NOT NULL PRIMARY KEY,
STORE_NAME varchar(20) NOT NULL,
STORE_YTD_SALES numeric NOT NULL,
REGION_CODE int NOT NULL,
EMP_CODE int NOT NULL
) Engine=InnoDB;
ALTER TABLE EMPLOYEE ADD CONSTRAINT STORE_CD
FOREIGN KEY STORE_CD(STORE_CODE) REFERENCES STORE(STORE_CODE);
ALTER TABLE STORE ADD CONSTRAINT REGION_CD
FOREIGN KEY REGION_CD(REGION_CODE) REFERENCES REGION(REGION_CODE);
ALTER TABLE STORE ADD CONSTRAINT EMPLOYEE_CD
FOREIGN KEY EMPLOYEE_CD(EMP_CODE) REFERENCES EMPLOYEE(EMP_CODE);
最佳答案
不可能有相互外键,除非您允许至少其中一列为 NULL
。否则你永远不可能有一组一致的表:如果你先添加商店,它将引用一个不存在的员工;如果您先添加员工,它将引用一个不存在的商店。
因此您需要允许引用列为NULL
。然后,您可以向第一个表中的引用列中添加一行 NULL
,向第二个表中添加一行,然后使用第二个表中的 ID 填充第一个表中的引用列。
关于mysql - 在相互引用的表中使用外键的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330023/