表将建立,但每次我尝试将值插入表中时,我都会收到外键约束失败的 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)
除非您允许至少其中一列是 ,否则不可能有相互的外键NULL。否则你永远不可能有一组一致的表:如果你先添加商店,它将引用一个不存在的员工;如果您先添加员工,它将引用不存在的商店。
所以你需要允许引用列是NULL. 然后您可以NULL在引用列中向第一个表中添加一行,向第二个表中添加一行,然后使用第二个表中的 ID 填充第一个表中的引用列。
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |