错误代码1215.无法为我的表添加外键约束

时间:2017-04-26 18:41:39

标签: mysql sql foreign-keys

我正在尝试为SQL编写一个脚本,用于添加2个表并添加另一个通过外键引用这两个表的表。我一直在'注册'表中收到错误。它说外键不能创建。

以下是表格。

CREATE TABLE IF NOT EXISTS `homework7`.`Section` (
  `CourseNo` INT NOT NULL,
  `SectionNo` INT NOT NULL,
  `Instructor` VARCHAR(45) NULL,
  PRIMARY KEY (`CourseNo`, `SectionNo`),
  FOREIGN KEY (`CourseNo`) REFERENCES Course(`CourseNo`));

CREATE TABLE IF NOT EXISTS `homework7`.`Student` (
  `SSN` INT NOT NULL,
  `FirstName` VARCHAR(45) NULL,
  `LastName` VARCHAR(45) NULL,
  `Street` VARCHAR(45) NULL,
  `City` VARCHAR(45) NULL,
  `State` VARCHAR(2) NULL,
  `Zip` INT NULL,
   PRIMARY KEY (`SSN`));

这是我遇到麻烦的那个。

  CREATE TABLE IF NOT EXISTS `homework7`.`Enrolls` (
  `SSN` INT NOT NULL,
  `CourseNo` Int NOT NULL,
  `SectionNo` INT NOT NULL,
  PRIMARY KEY (`SSN`, `SectionNo`, `CourseNo`),
  FOREIGN KEY (`SSN`) REFERENCES Student(`SSN`),
  FOREIGN KEY (`CourseNo`) REFERENCES Section(`CourseNo`),
  FOREIGN KEY (`SectionNo`) REFERENCES Section(`SectionNo`));

此外,架构也在这里。 http://imgur.com/a/fTg5O

所以应该 注册(CourseNo)参考课程(CourseNo)或Section(CourseNo)?

2 个答案:

答案 0 :(得分:0)

外键必须是其他表的主键,所以对于麻烦部分你可以使用Course(CourseNo)而不是Section(CourseNo)而liff也提到

CREATE TABLE IF NOT EXISTS `homework7`.`Enrolls` (
  `SSN` INT NOT NULL,
  `CourseNo` Int NOT NULL,
  `SectionNo` INT NOT NULL,
  PRIMARY KEY (`SSN`, `SectionNo`, `CourseNo`),
  FOREIGN KEY (`SSN`) REFERENCES Student(`SSN`),
  FOREIGN KEY (`CourseNo`) REFERENCES Course(`CourseNo`),
  FOREIGN KEY (`SectionNo`) REFERENCES Section(`SectionNo`));

答案 1 :(得分:0)

尝试:

  FOREIGN KEY (`CourseNo`, `SectionNo`) REFERENCES Section(`CourseNo`, `SectionNo`)

外键必须引用引用表中索引的字段。