无法添加我的第二个外键约束

时间:2018-01-29 19:16:46

标签: mysql foreign-keys

CREATE TABLE Transcripts (sID VARCHAR(7), cNo VARCHAR(10),
semester VARCHAR(20), grade CHAR(1), PRIMARY KEY (sID)
);
CREATE TABLE Students (sID CHAR(7), sName VARCHAR(20),
bDate DATE, phone VARCHAR(12), major VARCHAR(30), avgGPA VARCHAR(4), PRIMARY KEY (sID),
FOREIGN KEY (sID)
    REFERENCES Transcripts(sID)
);
CREATE TABLE Courses (cNo VARCHAR(10), cTitle VARCHAR(30),
creditHours VARCHAR(2), deptName VARCHAR(30), PRIMARY KEY (cNo),
FOREIGN KEY (cNo)
    REFERENCES Transcripts(cNo)
);

所以每当我运行它时,第一个外键工作得很好,每当我运行下一个表时它就会给我回复这个错误“ERROR 1215(HY000):无法添加外键约束”我做错了什么?

4 个答案:

答案 0 :(得分:1)

这是产生错误的外键:

project.developers

但是FOREIGN KEY (cNo) REFERENCES Transcripts(cNo) 不是该表中任何KEY的一部分。

外键必须引用父表的UNIQUE或PRIMARY KEY的列。

请参阅MySQL Creating tables with Foreign Keys giving errno: 150以获取外键所需的良好清单。

答案 1 :(得分:1)

在添加外键之前索引外键列。

Transcripts(cNo)

答案 2 :(得分:0)

cNo定义为Courses表上的外键,它必须是主键 或其他表的唯一键。

CREATE TABLE Transcripts(
  sID VARCHAR(7), 
  cNo VARCHAR(10) NOT NULL UNIQUE,
  semester VARCHAR(20), 
  grade CHAR(1), 
  PRIMARY KEY (sID)
);

http://sqlfiddle.com/#!9/fddf8

正如我上面写的那样,改变成绩单将解决你的问题。

答案 3 :(得分:0)

这个逻辑是不是倒退了?难道不是“成绩单”有两个引用其他两个表的FK吗?并且,正如已经指出的那样,首先声明其他两个表。