Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL中有多个外键为主键的表,出现错误1215:无法添加外键约束_Mysql_Sql_Foreign Keys_Composite Primary Key - Fatal编程技术网

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个属性。我正在这样做:CONSTRAINT
idExamSubject
外键(
idExamSubject
)REFERENCES
test
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,