我目前的表格如下:
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 :(得分: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列的索引,因此需要在其上创建单独的索引。