2016-02-28 113 views
2

ERROR 1005(HY000)在線路__:無法創建表 'doanv.ENROLLED'(錯誤:150) 再見爲什麼我不能在MySQL中創建表? ERROR 1005(HY000)

STUDENTCOURSEPROF成功創建。
ENROLLEDTEACHING無法創建。
我做錯了什麼?

CREATE TABLE STUDENT 
(sID INTEGER PRIMARY KEY NOT NULL, 
sFName VARCHAR(20), 
sLName VARCHAR(20)); 

CREATE TABLE COURSE 
(cID VARCHAR(20) PRIMARY KEY NOT NULL, 
cName VARCHAR(20), 
cr INTEGER); 

CREATE TABLE PROF 
(pID INTEGER PRIMARY KEY NOT NULL, 
pFName VARCHAR(20), 
pLName VARCHAR(20)); 

CREATE TABLE ENROLLED 
(sID INTEGER NOT NULL, 
cID VARCHAR(20) NOT NULL, 
PRIMARY KEY (sID, cID), 
FOREIGN KEY (sID) REFERENCES STUDENT, 
FOREIGN KEY (cID) REFERENCES COURSE); 

CREATE TABLE TEACHING 
(pID INTEGER NOT NULL, 
cID VARCHAR(20) NOT NULL, 
PRIMARY KEY (pID, cID), 
FOREIGN KEY (pID) REFERENCES PROF, 
FOREIGN KEY (cID) REFERENCES COURSE); 
+0

你可以離開標題的MYSQL,mysql標籤就足夠了。 –

回答

0

外鍵引用需要鑰匙被引用:

CREATE TABLE ENROLLED (
    sID INTEGER NOT NULL, 
    cID VARCHAR(20) NOT NULL, 
    PRIMARY KEY (sID, cID), 
    FOREIGN KEY (sID) REFERENCES STUDENT(sID), 
-----------------------------------------^ 
    FOREIGN KEY (cID) REFERENCES COURSE(cID) 
); 
1

在MySQL中,你需要指定被引用的列。 在SQL的某些其他實現中,您可以省略(sID)(cID)

CREATE TABLE ENROLLED 
(sID INTEGER NOT NULL, 
cID VARCHAR(20) NOT NULL, 
PRIMARY KEY (sID, cID), 
FOREIGN KEY (sID) REFERENCES STUDENT(sID), 
FOREIGN KEY (cID) REFERENCES COURSE(cID)); 
0

「爲什麼我不能在MySQL的創建表ERROR 1005(HY000)?」
ERROR 1005 (HY000) at line __: Can't create table 'doanv.ENROLLED' (errno: 150)


MySQL - FOREIGN KEY Constraints Documentation

如果您重新創建一個被刪除的表,它必須有一個符合forei的定義引用它的gn鍵約束。如前所述,它必須具有正確的列名稱和類型,並且必須在引用鍵上具有索引。 如果這些不滿足,MySQL將返回錯誤1005並引用錯誤消息中的錯誤150,這意味着外鍵約束未正確形成。同樣,如果由於錯誤150而導致ALTER TABLE失敗,這意味着對於已更改的表,外鍵定義將不正確地形成。

您在示例代碼中省略了外鍵引用;試試這個代替:

CREATE TABLE STUDENT 
(sID INTEGER PRIMARY KEY NOT NULL, 
sFName VARCHAR(20), 
sLName VARCHAR(20)); 

CREATE TABLE COURSE 
(cID VARCHAR(20) PRIMARY KEY NOT NULL, 
cName VARCHAR(20), 
cr INTEGER); 

CREATE TABLE PROF 
(pID INTEGER PRIMARY KEY NOT NULL, 
pFName VARCHAR(20), 
pLName VARCHAR(20)); 

CREATE TABLE ENROLLED 
(sID INTEGER NOT NULL, 
cID VARCHAR(20) NOT NULL, 
PRIMARY KEY (sID, cID), 
FOREIGN KEY (sID) REFERENCES STUDENT(sID), 
FOREIGN KEY (cID) REFERENCES COURSE(cID)); 

CREATE TABLE TEACHING 
(pID INTEGER NOT NULL, 
cID VARCHAR(20) NOT NULL, 
PRIMARY KEY (pID, cID), 
FOREIGN KEY (pID) REFERENCES PROF(pID), 
FOREIGN KEY (cID) REFERENCES COURSE(cID)); 
相關問題