0
CREATE  TABLE `assessmentbookdb`.`MCQs` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `MCQAnswer` VARCHAR(200) NOT NULL ,
  `QuestionID` INT NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `QuestionID` (`QuestionID` ASC) ,
  CONSTRAINT `QuestionID`
    FOREIGN KEY (`QuestionID` )
    REFERENCES `assessmentbookdb`.`Question` (`QuestionID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

消息日志:

错误 1005:无法创建表 'assessmentbookdb.mcqs' (errno: 121) SQL 语句:

CREATE  TABLE `assessmentbookdb`.`MCQs` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `MCQAnswer` VARCHAR(200) NOT NULL ,
  `QuestionID` INT NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `QuestionID` (`QuestionID` ASC) ,
  CONSTRAINT `QuestionID`
    FOREIGN KEY (`QuestionID` )
    REFERENCES `assessmentbookdb`.`Question` (`QuestionID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
    ENGINE = InnoDB
4

5 回答 5

6

仔细检查:

  • 密钥的名称是唯一的
  • 您要耦合的两个键具有完全相同的数据类型(此处INT NOT NULL:),甚至有符号
  • 引用字段实际存在
于 2012-08-02T10:34:16.577 回答
2

基于谷歌搜索,我假设您有一个与您尝试添加约束的名称相同的约束。可能是您没有从旧版本的表中删除旧约束或其他东西。

于 2012-08-02T10:35:54.813 回答
0

看看这里,尽量不要给你的约束命名。

于 2012-08-02T10:38:12.343 回答
0

由于未正确形成外键约束,表创建失败

不知何故,您的外键不正确。如果您引用的表尚不存在,则可能是这种情况。

于 2012-08-02T10:34:09.043 回答
-1

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

InnoDB 支持外键,让您可以跨表交叉引用相关数据,以及外键约束,这有助于保持分散数据的一致性。CREATE TABLE 或 ALTER TABLE 语句中 InnoDB 外键约束定义的语法如下所示:

 [CONSTRAINT [symbol]] FOREIGN KEY
 [index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]

 reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
于 2012-08-02T10:44:02.563 回答