2016-02-28 111 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)); 
相关问题