【发布时间】: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