在相互引用的表中使用外键的正确方法是什么

WP0*_*987 1 mysql sql

表将建立,但每次我尝试将值插入表中时,我都会收到外键约束失败的 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);
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

除非您允许至少其中一列是 ,否则不可能有相互的外键NULL。否则你永远不可能有一组一致的表:如果你先添加商店,它将引用一个不存在的员工;如果您先添加员工,它将引用不存在的商店。

所以你需要允许引用列是NULL. 然后您可以NULL在引用列中向第一个表中添加一行,向第二个表中添加一行,然后使用第二个表中的 ID 填充第一个表中的引用列。