为什么我不能在MySQL中创建表?错误1005(HY000)

时间:2016-02-28 00:34:58

标签: mysql database

  

ERROR 1005(HY000)第__行:无法创建表格' doanv.ENROLLED' (错误:150)   再见

成功创建了表格font-feature-settings:"smcp"STUDENTCOURSE 无法创建表PROFENROLLED 我做错了什么?

TEACHING

3 个答案:

答案 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));