2013-06-03 78 views
1

我是數據庫的新手,當我嘗試創建這些表時,我不斷收到錯誤信息。哪裏出錯?MySQL,MariaDB:無法創建表 - ERROR 1005(HY000)。外鍵有問題

我發現了很多類似於我的問題,但他們沒有幫我解決這個問題。

CREATE TABLE IF NOT EXISTS course 
(
    cou_id VARCHAR(3), 
    course_name VARCHAR(25), 
    CONSTRAINT pk_course PRIMARY KEY (cou_id, course_name) 
); 

CREATE TABLE IF NOT EXISTS students_marks 
(
    stu_id INT, 
    student_name VARCHAR(25), 
    course_name VARCHAR(25), 
    first_mark NUMERIC(2,0), 
    second_mark NUMERIC(2,0), 
    third_mark NUMERIC(2,0), 
    CONSTRAINT pk_studentsmarks PRIMARY KEY (stu_id), 
    CONSTRAINT fk_studentsmarks_course FOREIGN KEY (course_name) REFERENCES course (course_name) 
); 

這是來自INNODB STATUS。

LATEST FOREIGN KEY ERROR 
------------------------ 
130603 20:17:22 Error in foreign key constraint of table testdb/students_marks: 
FOREIGN KEY (course_name) REFERENCES course (course_name) 
): 
Cannot find an index in the referenced table where the 
referenced columns appear as the first columns, or column types 
in the table and the referenced table do not match for constraint. 
Note that the internal storage type of ENUM and SET changed in 
tables created with >= InnoDB-4.1.12, and such columns in old tables 
cannot be referenced by such columns in new tables. 
See http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 
for correct foreign key definition. 
+0

你得到的確切錯誤信息是什麼? –

回答

0

你的主鍵是你的課程表設置爲cou_idcourse_name。要在students_marks表中添加外鍵約束,你必須引用這兩個領域(幷包含在你的表定義這兩個字段):

CREATE TABLE IF NOT EXISTS course 
(
    cou_id VARCHAR(3), 
    course_name VARCHAR(25), 
    CONSTRAINT pk_course PRIMARY KEY (cou_id, course_name) 
); 

CREATE TABLE IF NOT EXISTS students_marks 
(
    stu_id INT, 
    student_name VARCHAR(25), 
    cou_id VARCHAR(3), 
    course_name VARCHAR(25), 
    first_mark NUMERIC(2,0), 
    second_mark NUMERIC(2,0), 
    third_mark NUMERIC(2,0), 
    CONSTRAINT pk_studentsmarks PRIMARY KEY (stu_id), 
    CONSTRAINT fk_studentsmarks_course FOREIGN KEY (cou_id,course_name) REFERENCES course(cou_id,course_name) 
); 
+0

即使從SQL Fiddle複製並粘貼工作示例,我仍然收到錯誤。但是代碼在SQL Fiddle中起作用。有任何想法嗎? – rcx

+0

@doc - 你是否在student_marks的表定義中包含了cou_id?它在本地爲我和在小提琴上工作。 – sgeddes

+0

是的,我已經從sx複製你的例子到我的sql腳本。它也可以在sql小提琴中工作,但不在我的系統上......奇怪。但是,如果我用外鍵刪除最後一行,則一切正常。 – rcx

0

你只引用合成主鍵的一個字段!

相關問題