错误1215:无法添加外键约束 - MySQL(简单表)

时间:2015-10-19 04:47:57

标签: mysql database

我目前的表格如下:

    CREATE TABLE course(
       CourseNum INT(11),
       CourseName VARCHAR(30),
       NumOfUnit INT(11),
       PRIMARY KEY(CourseNum)
    );

    CREATE TABLE timeandloc(
       CourseNum INT(11),
       Quarter VARCHAR(20),
       DayTime VARCHAR(40),
       RoomNum INT,
       PRIMARY KEY(CourseNum, Quarter, DayTime),
       FOREIGN KEY(CourseNum) REFERENCES course (CourseNum)
    );

我能够使用查询添加这些内容,但是当我尝试添加此表时:

    CREATE TABLE student(
       StudentName VARCHAR(30),
       CourseNum INT(11),
       Quarter VARCHAR(20),
       PRIMARY KEY(StudentName, CourseNum, Quarter),
       FOREIGN KEY(CourseNum) REFERENCES course(CourseNum),
       FOREIGN KEY(Quarter) REFERENCES timeandloc(Quarter)
    );

我得到了

  

错误代码:1215。无法添加外键约束。

似乎是这条线是罪魁祸首:

    FOREIGN KEY(Quarter) REFERENCES timeandloc(Quarter)

当我尝试添加没有该行的表时,一切正常,没有任何障碍。

我对MySQL和数据库一般都很新,所以我不确定是什么问题。任何帮助都会很棒。谢谢。

1 个答案:

答案 0 :(得分:0)

在timeandloc表中的Quarter字段上创建一个单独的索引,然后创建有问题的create table query。

alter table timeandloc add index idx_Quarter(Quarter);

CREATE TABLE student(
       StudentName VARCHAR(30),
       CourseNum INT(11),
       Quarter VARCHAR(20),
       PRIMARY KEY(StudentName, CourseNum, Quarter),
       FOREIGN KEY(CourseNum) REFERENCES course(CourseNum),
       FOREIGN KEY(Quarter) REFERENCES timeandloc(Quarter)
    );

<强>更新

对于性能观点,应该对两个表(父/子)中的连接字段建立索引。当我们创建外键时,mysql本身在字段上创建一个索引,我们创建外键但是在引用表中没有索引的情况下不允许使用索引。由于索引从左到右工作,因此在您的情况下,不会从主键使用Quarter列的索引,因此需要在其上创建单独的索引。