我正在尝试在MAJORS表上创建一个FOREIGN KEY,该表引用MAJOR_DESCRIP表中的major。换句话说,我希望有一个约束来阻止某人进入在MAJOR _DESCRIP表中没有记录的专业。我是主键和外键的新手,所以我不确定这里到底出了什么问题。我将在下面提供表数据以及我尝试运行的命令及其返回的错误消息。预先谢谢你。
这是我要用来完成此任务的代码:
ALTER TABLE MAJORS
ADD CONSTRAINT MAJORS_FK FOREIGN KEY (Major) references MAJOR_DESCRIP(Major);
答案 0 :(得分:2)
这里的问题可能是 MAJORS 表的 MAJOR 字段中有一些值,而 MAJOR 字段中没有这些值 MAJOR_DESCRIP 表中。
因此,当您尝试放置约束时,由于遇到了此错误,约束无法令人满意。
最好的解决方案是清除 MAJORS 表中的数据,然后添加约束,然后添加正确的数据。
答案 1 :(得分:1)
Oracle 12c Database SQL Reference包含以下语句:
外键约束要求一个表中的值与另一个表中的值匹配。
因此,要解决该错误,必须在添加约束之前 执行以下操作之一。
解决方案1:将数据添加到MAJOR_DESCRIP
在MAJOR_DESCRIP
表中为Economics
,Geology
和Criminal Justice
添加3行:
INSERT INTO MAJOR_DESCRIP (MAJOR, DESCRIPTION, YRTTRM) VALUES ('Economics', 'Get rich quick', '201801');
INSERT INTO MAJOR_DESCRIP (MAJOR, DESCRIPTION, YRTTRM) VALUES ('Geology', 'Rocks are fun', '201801');
INSERT INTO MAJOR_DESCRIP (MAJOR, DESCRIPTION, YRTTRM) VALUES ('Criminal Justice', 'Crooks and lawyers', '201801');
COMMIT;
解决方案2:从MAJOR
删除MAJOR
中引用了Economics
,Geology
和Criminal Justice
的行,这些行由STUDENT_ID
的{{1}}和900374912
:
900374913
然后,您将能够添加DELETE FROM MAJOR
WHERE MAJOR IN ('Economics', 'Geology', 'Criminal Justice');
COMMIT;
约束。
答案 2 :(得分:0)
从Major Column value
中删除Majors Table
,然后添加foreign key constraint