2016-02-19 68 views
0

我知道,爲了在依賴外鍵的表中插入值,您需要在該表的主鍵中包含數據。SQL Developer - 完整性約束,未找到父鍵(插入值時)

這是我的約束:

INSERT INTO courses VALUES ('21', 'Logic', 1, 1, 5); 
INSERT INTO courses VALUES ('22', 'Math', 1, 1, 4); 
INSERT INTO courses VALUES ('23', 'OOP', 1, 2, 5); 
INSERT INTO courses VALUES ('24', 'DB', 2, 1, 8); 
INSERT INTO courses VALUES ('25', 'Java', 2, 2, 5); 

INSERT INTO profs VALUES ('p1', 'Mary', 'Banks', 'Prof'); 
INSERT INTO profs VALUES ('p2', 'Francis', 'Steven', 'Conf'); 
INSERT INTO profs VALUES ('p3', 'John', 'Jobs', 'Prof'); 
INSERT INTO profs VALUES ('p4', 'Alex', 'Brown', 'Prof'); 
INSERT INTO profs VALUES ('p5', 'Dan', 'Lovelace', 'Lect'); 
INSERT INTO profs VALUES ('p6', 'Roxanne', 'Smith', 'Conf'); 

然後我試圖填充DIDACT表:

INSERT INTO didact VALUES ('p1','21'); 
INSERT INTO didact VALUES ('p3','21'); 
INSERT INTO didact VALUES ('p5','22'); 

ALTER TABLE DIDACT 
    MODIFY (CONSTRAINT id_prof_fk FOREIGN KEY(id_prof) REFERENCES profs (id_prof)); 

ALTER TABLE DIDACT 
    MODIFY (CONSTRAINT id_course_fk FOREIGN KEY(id_course) REFERENCES courses (id_course)); 

接下來,我在這兩個PROFS和課程表中插入值

但會發生這種情況:

INSERT INTO didact VALUES ('p1','21') Error report - SQL Error: ORA-02291: integrity constraint (user.ID_COURSE_FK) violated - parent key not found 02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found" *Cause: A foreign key value has no matching primary key value. *Action: Delete the foreign key or add a matching primary key.

這是我的表,以防它會幫助:

CREATE TABLE courses(
    id_course CHAR(2), 
    course_name VARCHAR2(15), 
    year NUMBER(1), 
    semester NUMBER(1), 
    credits NUMBER(2) 
) 

CREATE TABLE profs(
    id_prof CHAR(4), 
    name CHAR(10), 
    surname CHAR(10), 
    grade VARCHAR2(5) 
) 

CREATE TABLE didact(
    id_prof CHAR(4), 
    id_course CHAR(4) 
) 

我與這個掙扎了大約一個小時,我還沒有設法找到我的錯誤。

謝謝。

+1

作爲一般規則:**除非你真的知道你在做什麼,否則不要**使用char(x)。 –

+0

爲什麼在某些列中使用CHAR而不是VARCHAR2? –

+0

是的......這是一個愚蠢的錯誤,我通常使用CHAR來提高數據庫的性能,但我忘了固定長度問題和空白... – Lazai

回答

1

您的表格中似乎有id_course的不同格式。在didact它是id_course CHAR(4)courses它是id_course CHAR(2)

而且由於您使用的是固定長度類型,因此didact中的值將與courses中的值相差兩個附加空格。

相關問題