ERROR 1005(HY000)第__行:无法创建表格' doanv.ENROLLED' (错误:150) 再见
成功创建了表格font-feature-settings:"smcp"
,STUDENT
,COURSE
无法创建表PROF
和ENROLLED
我做错了什么?
TEACHING
答案 0 :(得分:1)
在MySQL中,您需要指定要引用的列。 您可以在SQL的其他一些实现中省略(sID)和(cID)。
{{1}}
答案 1 :(得分: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)
);
答案 2 :(得分:0)
“为什么我不能在mySQL中创建表格?ERROR 1005(HY000)”
ERROR 1005 (HY000) at line __: Can't create table 'doanv.ENROLLED' (errno: 150)
来自MySQL - FOREIGN KEY Constraints Documentation:
如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义。它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述。 如果不满足这些,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));