MySQL无法使用外键创建表

时间:2012-08-02 10:30:22

标签: mysql foreign-keys

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'(错误号: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

5 个答案:

答案 0 :(得分:6)

仔细检查:

  • 密钥的名称是唯一的
  • 您正在耦合的两个键具有完全相同的数据类型(此处为:INT NOT NULL),甚至是签名
  • 引用字段实际存在

答案 1 :(得分:2)

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

答案 2 :(得分:0)

  

表创建失败,因为未正确形成外键约束

不知何故,你的外键不正确。如果您所引用的表尚不存在,则可以这样。

答案 3 :(得分:0)

看看Here并尝试不为您的约束命名。

答案 4 :(得分:-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