【问题标题】:MySQL can't create table with foreign keyMySQL 无法使用外键创建表
【发布时间】:2012-08-02 18:44:02
【问题描述】:
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

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    仔细检查:

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

    【讨论】:

    • 但在不同的答案中,您会写“哦,是的,我有相同的约束名称。” - 所以你没有检查它。
    • 按照这篇文章的建议,确保它们的签名相同。我检查了完全相同的数据类型——两个都是 bigint(20)——但一个是签名的,另一个是未签名的。我把它们做的一样,而且效果很好。
    【解决方案2】:

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

    【讨论】:

    • 哦,我有相同的约束名称。非常感谢
    【解决方案3】:

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

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

    【讨论】:

    • 问题表已经存在,QuestionID是问题表的主键。我找不到问题所在
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 2012-04-23
        相关资源
        最近更新 更多