2016-12-10 44 views
0

當我將數據插入到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)); 
+0

事實上,你是否在'HARDWARE'表中有一行,'HARDWARE_ID ='H0002'?你是否理解引用主鍵的主鍵和外鍵是如何工作的? – mathguy

+0

我這樣做,當我問這個問題時,我確信數據已經被插入,並且所有東西都在那裏 - 但是我一定犯了一個錯誤,沒有像我確定的那樣填充行。所有的代碼都已經寫好了,我只是一定還沒有執行過它,儘管我認爲我已經完成了。 – JadstaSeven

+0

:-)不用擔心,那發生在每個人身上。 – mathguy

回答

0

該錯誤消息可以是起初有點神祕,但很明顯。

兩個INSERT s之間唯一的區別是HARDWARE_ID。因此'H0002'不是有效的HARDWARE_ID。它不在HARDWARE表中。

+1

謝謝!這是一個我沒有意識到的小錯誤,我一直在試圖修復它近2個小時。我看到了你的答案,並認爲我會嘗試刪除所有表格,並將代碼全部粘貼回來,以確保everythiung在那裏,它工作!你是對的,我一定沒有正確地檢查硬件表中的數據。感謝您的快速回答,這對我有很大幫助:D – JadstaSeven