添加外键约束时出错?

时间:2018-11-27 03:48:54

标签: sql oracle oracle-apex

我正在尝试在MAJORS表上创建一个FOREIGN KEY,该表引用MAJOR_DESCRIP表中的major。换句话说,我希望有一个约束来阻止某人进入在MAJOR _DESCRIP表中没有记录的专业。我是主键和外键的新手,所以我不确定这里到底出了什么问题。我将在下面提供表数据以及我尝试运行的命令及其返回的错误消息。预先谢谢你。

enter image description here

enter image description here

enter image description here

enter image description here

这是我要用来完成此任务的代码:

ALTER TABLE MAJORS 
ADD CONSTRAINT MAJORS_FK FOREIGN KEY (Major) references MAJOR_DESCRIP(Major);

Oracle Apex返回的错误是-enter image description here

3 个答案:

答案 0 :(得分:2)

这里的问题可能是 MAJORS 表的 MAJOR 字段中有一些值,而 MAJOR 字段中没有这些值 MAJOR_DESCRIP 表中。

因此,当您尝试放置约束时,由于遇到了此错误,约束无法令人满意。

最好的解决方案是清除 MAJORS 表中的数据,然后添加约束,然后添加正确的数据。

答案 1 :(得分:1)

Oracle 12c Database SQL Reference包含以下语句:

  

外键约束要求一个表中的值与另一个表中的值匹配。

因此,要解决该错误,必须在添加约束之前 执行以下操作之一。

解决方案1:将数据添加到MAJOR_DESCRIP

MAJOR_DESCRIP表中为EconomicsGeologyCriminal 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中引用了EconomicsGeologyCriminal 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