我正在尝试为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)?
答案 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`)
外键必须引用引用表中索引的字段。