我创建了以下表格:
A3STUDENT
CREATE TABLE A3STUNDENT(
STD_ID INTEGER NOT NULL,
STD_NAME VARCHAR(30),
STD_MAJOR CHAR(4),
STD_RANK CHAR(2),
CONSTRAINT PK_A3STUDENT PRIMARY KEY (STD_ID)
);
CREATE TABLE A3COURSE(
CRS_TIME VARCHAR(10),
CRS_ROOM CHAR(5),
CRS_ID CHAR(7) NOT NULL,
CONSTRAINT PK_A3COURSE PRIMARY KEY (CRS_ID)
);
CREATE TABLE A3ENROLL(
ENR_GRADE CHAR(1),
STD_ID INTEGER NOT NULL,
CRS_ID CHAR(7) NOT NULL,
CONSTRAINT PK_A3ENROLL PRIMARY KEY (STD_ID, CRS_ID),
CONSTRAINT FK_STD_ENR FOREIGN KEY (STD_ID) REFERENCES A3STUDENT(STD_ID),
CONSTRAINT FK_CRS_ENR FOREIGN KEY (CRS_ID) REFERENCES A3COURSE(CRS_ID)
);
当我去插入这样的值时:
INSERT INTO A3ENROLL VALUES ('A', 100, 'MGMT445');
我收到此错误:
#1452-无法添加或更新子行:外键约束失败(
Hess
。A3ENROLL
,CONSTRAINT FK_CRS_ENR
FOREIGN KEY(
CRS_ID
)参考A3COURSE
(CRS_ID
))我似乎无法理解为什么我的数据无法插入。我在俯视什么?
最佳答案
这通常是因为A3STUNDENT
和A3COURSE
表中没有数据。
外键关系意味着包含中央数据值的主表和具有指向父表的相同值的子表,如果不存在任何试图在子表中创建外键值的INSERT或UPDATE操作,则将被拒绝匹配父表中的候选键值。
表A3ENROLL
用作参考100
和MGMT445
在上述表中不存在。
在A3ENROLL
表中插入数据之前,必须确保其他表A3STUNDENT
和A3COURSE
中有数据,因为表A3ENROLL
的外键为A3STUNDENT
和A3COURSE
,因此表示您必须在这些表中具有这些数据,例如:
Select * from A3STUNDENT;
STD_ID | STD_NAME | STD_MAJOR | STD_RANK
100 | 'Zack' | ... | ....
Select * from A3COURSE;
CRS_ID | CRS_ROOM | CRS_TIME
MGMT445 | ... | ....
您可以尝试在以前的表中插入数据,然后在表
A3ENROLL
中插入。在这里,您可以获得更多信息:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html