首页 文章

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

提问于
浏览
2

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

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

3 回答

  • 0

    “为什么我不能在mySQL中创建表?ERROR 1005(HY000)”ERROR 1005(HY000)第__行:无法创建表'doanv.ENROLLED'(错误号:150)


    来自MySQL - FOREIGN KEY Constraints Documentation

    如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义 . 它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述 . 如果不满足这些,MySQL将返回错误1005并在错误消息中引用错误150,这意味着未正确形成外键约束 . 类似地,如果ALTER TABLE由于错误150而失败,则意味着对于更改的表将错误地形成外键定义 .

    您在示例代码中省略了外键引用;试试这个:

    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));
    
  • 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

    外键引用需要引用的键:

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

相关问题