2015-10-19 101 views
1

目前的表我有如下:错误1215:无法添加外键约束 - MySQL的(简单表)

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和数据库一般都很陌生,所以我不确定有什么问题。任何帮助都会很棒。谢谢。

回答

0

在timeandloc表中为季度字段创建单独的索引,然后创建有问题的创建表查询。

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本身会在我们创建外键的字段上创建一个索引,但不能在引用表中引用列上没有索引。由于索引从左到右工作,所以在您的情况下,“季度”列的索引将不会从主键使用,因此需要在其上创建单独的索引。

+0

谢谢!这似乎对我有效,但我似乎不明白为什么。你介意解释为什么这对我有效吗? – JAguaa

+0

请检查帖子中的原因。 –

+0

知道了!谢谢! – JAguaa