當我將數據插入到ASSIGNMENTS表中時,除了硬件和軟件值之外,它們都可以正常工作,它們的編碼方式與其他編碼方式完全相同。我只是不明白。爲什麼沒有找到父鍵?
這工作:
INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID)
VALUES ('A0005','B0002','ST002','J0002');
但是當我嘗試以包括硬件或軟件的價值,就像這樣:
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'?你是否理解引用主鍵的主鍵和外鍵是如何工作的? – mathguy
我這樣做,當我問這個問題時,我確信數據已經被插入,並且所有東西都在那裏 - 但是我一定犯了一個錯誤,沒有像我確定的那樣填充行。所有的代碼都已經寫好了,我只是一定還沒有執行過它,儘管我認爲我已經完成了。 – JadstaSeven
:-)不用擔心,那發生在每個人身上。 – mathguy