mySQL中有多个外键为主键的表,出现错误1215:无法添加外键约束
我创建了这些表:mySQL中有多个外键为主键的表,出现错误1215:无法添加外键约束,mysql,sql,foreign-keys,composite-primary-key,Mysql,Sql,Foreign Keys,Composite Primary Key,我创建了这些表: CREATE TABLE `course` ( `idcourse` varchar(2) NOT NULL, `courseName` varchar(45) NOT NULL, `subjectID` varchar(2) NOT NULL, PRIMARY KEY (`idcourse`), KEY `subjectID_idx` (`subjectID`), CONSTRAINT `subjectID` FOREIGN KEY (`subject
CREATE TABLE `course` (
`idcourse` varchar(2) NOT NULL,
`courseName` varchar(45) NOT NULL,
`subjectID` varchar(2) NOT NULL,
PRIMARY KEY (`idcourse`),
KEY `subjectID_idx` (`subjectID`),
CONSTRAINT `subjectID` FOREIGN KEY (`subjectID`) REFERENCES `subject` (`idsubject`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
要主题表I,请添加一条记录: idsubject=02,subjectName=Mathematica 至课程表一添加记录: idcourse=03,courseName=1代数,subjectID=02 到考试表一添加记录: subjectID=02,courseID=03,examNumber=01,duration=180 现在,我想创建一个表:questionsinexam
CREATE TABLE `test`.`questionsinexam` (
`idExamSubject` VARCHAR(2) NOT NULL,
`idExamCourse` VARCHAR(2) NOT NULL,
`idExamNumber` VARCHAR(2) NOT NULL,
`idQuestionNumber` VARCHAR(3) NOT NULL,
`pointsPerQuestion` INT NULL,
PRIMARY KEY (`idExamSubject`, `idExamCourse`, `idExamNumber`, `idQuestionNumber`),
INDEX `idExamCourse_idx` (`idExamCourse` ASC),
INDEX `idExamNumber_idx` (`idExamNumber` ASC),
INDEX `idQuestionNumber_idx` (`idQuestionNumber` ASC),
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`exam` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idExamCourse`
FOREIGN KEY (`idExamCourse`)
REFERENCES `test`.`exam` (`courseID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idExamNumber`
FOREIGN KEY (`idExamNumber`)
REFERENCES `test`.`exam` (`examNumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idQuestionNumber`
FOREIGN KEY (`idQuestionNumber`)
REFERENCES `test`.`question` (`questionNumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
为什么我会犯这个错误
谢谢。这个约束肯定是错误的:
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`exam` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
也许你打算:
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`subject` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
确保在创建外键约束之前创建了目标表。引用的表需要首先存在(以便引擎可以验证用于外键的列上的类型)。外键指向主键,但不能指向主键的一部分。
exam
的主键是subjectID、courseID、examNumber
,因此外键必须指向主键中包含的所有3个属性。我正在这样做:CONSTRAINTidExamSubject
外键(idExamSubject
)REFERENCEStest
exam
(subjectID
)在更新无操作时删除无操作,约束idExamCourse
外键(idExamCourse
)参考test
test
(courseID
)在更新无操作时删除无操作,约束idExamNumber
外键(idExamNumber
)参考test
exam
(examNumber
)关于删除没有操作关于更新没有操作,你没有:参考test.exam(subjectID)
我终于创建了表:主键(
subjectID,
courseID,
examNumber,
问题号),键
questionsOfTable\u idx`(subjectID
,questionNumber
),约束ExamTable外键(subjectID
,courseID
,examNumber
)参考考试
(subjectID
,courseID
,examNumber>)在删除无操作更新无操作时,约束questionsOfTable
外键(subjectID
,questionNumber
)引用question
(subjectID
,questionNumber
)ON DELETE NO ACTION ON UPDATE NO ACTION`现在我在add error 1452:1452:无法添加或更新子行时出错:@Honeybager感谢您的帮助,我在您的帮助下理解并修复了它。我遇到了相同的错误:>错误1215:无法添加外键constraint@Asaf-以不同的顺序做事。
CREATE TABLE `test`.`questionsinexam` (
`idExamSubject` VARCHAR(2) NOT NULL,
`idExamCourse` VARCHAR(2) NOT NULL,
`idExamNumber` VARCHAR(2) NOT NULL,
`idQuestionNumber` VARCHAR(3) NOT NULL,
`pointsPerQuestion` INT NULL,
PRIMARY KEY (`idExamSubject`, `idExamCourse`, `idExamNumber`, `idQuestionNumber`),
INDEX `idExamCourse_idx` (`idExamCourse` ASC),
INDEX `idExamNumber_idx` (`idExamNumber` ASC),
INDEX `idQuestionNumber_idx` (`idQuestionNumber` ASC),
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`exam` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idExamCourse`
FOREIGN KEY (`idExamCourse`)
REFERENCES `test`.`exam` (`courseID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idExamNumber`
FOREIGN KEY (`idExamNumber`)
REFERENCES `test`.`exam` (`examNumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idQuestionNumber`
FOREIGN KEY (`idQuestionNumber`)
REFERENCES `test`.`question` (`questionNumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`exam` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `idExamSubject`
FOREIGN KEY (`idExamSubject`)
REFERENCES `test`.`subject` (`subjectID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,