首页 文章

MySQL中的外键:ERROR 1005

提问于
浏览
3

我对在MySQL中添加外键有点困惑

我要做的是参考学生主键:

CREATE TABLE Enrolled(sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid, cid), FOREIGN KEY (sid) REFERENCES Students);

但是,我得到的是

ERROR 1005 (HY000): Can't create table 'test_db.Enrolled' (errno: 150)

我四处搜寻,发现了

MySQL "ERROR 1005 (HY000): Can't create table 'foo.#sql-12c_4' (errno: 150)"

但是,我的Students表已经有一个主键,所以这应该不是问题:

| Students | CREATE TABLE Students (
  sid char(20) NOT NULL DEFAULT '',
  name char(20) DEFAULT NULL,
  login char(10) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  gpa float DEFAULT NULL,
  PRIMARY KEY (sid)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

我觉得我错过了一些相当基本的东西,但我似乎无法发现它 . 有什么建议?

2 回答

  • 3

    您应该在引用的表 REFERENCES Students(sid) 之后添加引用的列名 . 因此,您必须将代码更改为以下解决方案

    CREATE TABLE Enrolled
    (
      sid CHAR(20), 
      cid CHAR(20), 
      grade CHAR(2), 
      PRIMARY KEY (sid, cid), 
      FOREIGN KEY (sid) REFERENCES Students(sid)
    );
    
  • 1

    如何使引用的列显式化?就像是:

    CREATE TABLE Enrolled(
         sid CHAR(20), 
         cid CHAR(20), 
         grade CHAR(2), 
    
         PRIMARY KEY (sid, cid), 
         FOREIGN KEY (sid) REFERENCES Students (sid)
    );
    

    FOREIGN KEY (sid) REFERENCES Students (sid) ,最后一行 . 另请注意,如果外键是单列,您可以在列类型之后指定它:

    CREATE TABLE Enrolled(
        sid CHAR(20) REFERENCES Students (sid), 
        ...
    

相关问题