【问题标题】:Why is parent key not found?为什么找不到父键?
【发布时间】:2017-04-25 21:03:57
【问题描述】:

当我将数据插入到 ASSIGNMENTS 表中时,除了 HARDWARE 和 SOFTWARE 值之外,它一切正常,它们的编码方式与其他值完全相同。我就是不明白。

这行得通:

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID)
VALUES ('A0005','B0002','ST002','J0002');

但是当我尝试包含 HARDWARE 或 SOFTWARE 的值时,如下所示:

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID, HARDWARE_ID)
VALUES ('A0005','B0002','ST002','J0002','H0002');

我刚刚收到以下错误: SQL 错误:ORA-02291:违反完整性约束 (JAS1224.SYS_C0028418) - 未找到父键 02291. 00000 - “违反完整性约束 (%s.%s) - 未找到父键” *原因:外键值没有匹配的主键值。 *操作:删除外键或添加匹配的主键。

这里是所有代码,并且所有表都已正确填充(硬件和软件表的编码格式与人员表完全相同):

CREATE TABLE PROJECT
(PROJECT_ID CHAR(5) NOT NULL,
PROJECT_NAME CHAR(20),
PROJECT_TYPE CHAR(20),
START_DATE DATE,
END_DATE DATE,
PRIMARY KEY (PROJECT_ID));

CREATE TABLE HARDWARE
(HARDWARE_ID CHAR(5) NOT NULL,
HARDWARE_NAME CHAR(20),
PRIMARY KEY (HARDWARE_ID));

CREATE TABLE SOFTWARE
(SOFTWARE_ID CHAR(5) NOT NULL,
SOFTWARE_NAME CHAR(20),
PRIMARY KEY (SOFTWARE_ID));

CREATE TABLE STAFF
(STAFF_ID CHAR(5) NOT NULL,
STAFF_NAME CHAR(20),
PRIMARY KEY (STAFF_ID));

CREATE TABLE JOB
(JOB_ID CHAR(5) NOT NULL,
JOB_TYPE CHAR(20),
JOB_GRADE CHAR(20),
PRIMARY KEY (JOB_ID));

CREATE TABLE ASSIGNMENTS
(ASSIGNMENT_ID CHAR(5) NOT NULL,
PROJECT_ID CHAR(5),
STAFF_ID CHAR(5),
JOB_ID CHAR(5),
HARDWARE_ID CHAR(5),
SOFTWARE_ID CHAR(5),
PRIMARY KEY (ASSIGNMENT_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID),
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID),
FOREIGN KEY (JOB_ID) REFERENCES JOB(JOB_ID),
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID),
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID));

【问题讨论】:

  • 你在HARDWARE 表中有一行吗,HARDWARE_ID = 'H0002' 在哪里?你了解主键和引用主键的外键是如何工作的吗?
  • 我愿意,当我问这个问题时,我确信数据已经插入并且一切都在那里 - 但我一定犯了一个错误,没有像我确定的那样填充行有。所有的代码都已经写好并且准备好了,尽管我以为我已经执行了,但我一定没有执行它。
  • :-) 不用担心,每个人都会遇到这种情况。

标签: sql oracle foreign-keys primary-key


【解决方案1】:

错误信息一开始可能有点神秘,但很清楚。

两个INSERTs 之间的唯一区别是HARDWARE_ID。因此'H0002' 不是有效的HARDWARE_ID。它不在HARDWARE 表中。

【讨论】:

  • 谢谢!这是一个我没有意识到的小错误,我已经尝试修复它将近 2 个小时。我看到了您的回答,并认为我会尝试删除所有表格并将代码全部粘贴回去,以确保一切都在那里并且有效!你是对的,我一定没有正确检查硬件表中的数据。感谢您的快速回答,这对我有很大帮助:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2011-06-17
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多