【问题标题】:Foreign Key in MySQL : ERROR 1005MySQL 中的外键:错误 1005
【发布时间】:2013-09-13 10:12:09
【问题描述】:

我对在 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 | 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 |

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

【问题讨论】:

    标签: mysql sql foreign-keys


    【解决方案1】:

    您应该在引用的表之后添加引用的列名 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)
    );
    

    【讨论】:

      【解决方案2】:

      如何明确引用列?比如:

      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), 
          ...
      

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多