【问题标题】:MySQL error #1005 (Code 150)MySQL 错误 #1005(代码 150)
【发布时间】:2012-06-22 22:59:53
【问题描述】:

我已经尝试过创建这个表,但我没有尝试过使用 FK。

CREATE TABLE `tb_AutSituacao` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Nome` varchar(50) CHARACTER SET latin1 NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

CREATE TABLE `tb_AutHistorico` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `Situacao` int(11) NOT NULL,
 `Data` date NOT NULL,
 `Agente` int(11) NOT NULL,
 `Proposta` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `AutHistorico_Situacao` (`Situacao`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

ALTER TABLE `tb_AutHistorico` ADD FOREIGN KEY ( `Situacao` ) REFERENCES `sicor`.`tb_AutSituacao` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

我总是得到“#1005 - 无法创建表 'tablename' (errno: 150)”。感谢您的帮助。

【问题讨论】:

  • sicor 是有效的模式名称吗?您有:“REFERENCES sicor.tb_AutSituacao (id)”也许如果您删除 sicor 前缀并更改为“REFERENCES tb_AutSituacao (id)”
  • 是的,但我会尝试不使用这个。更新:带有或不带有架构名称的相同错误。
  • 当我添加分号并删除sicor.it works。不确定它是否相关,但您使用的是什么版本的 MySQL?
  • @Wiseguy MySQL 5.5.16。删除分号是什么意思?
  • 我只是在 CREATE 语句的末尾添加了分号,这样它就可以在 sqlfiddle 上运行(链接在我之前的评论中)。而已。我复制了您的查询,在每个 CREATE 语句后添加了一个分号,并删除了 sicor.

标签: mysql mysql-error-1005


【解决方案1】:
$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

修正您的 FOREIGN KEY 定义。

【讨论】:

    【解决方案2】:

    您的外键约束定义存在问题(请参阅http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html - 调试的最后一段)

    发生此错误时,定义本身不正确(语法错误)或引用的内容存在问题。你的语法是正确的,什么是引用是正确的,所以它很可能是架构引用。

    我可以很好地运行语句,但我必须在创建表名前加上模式名称。否则,MySQL 将假定您正在尝试为您当前使用的数据库创建表。请参阅以下修改后的语句:

    CREATE TABLE `sicor`.`tb_AutSituacao` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `Nome` varchar(50) CHARACTER SET latin1 NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `sicor`.`tb_AutHistorico` (
     `id` int(11) NOT NULL AUTO_INCREMENT,
     `Situacao` int(11) NOT NULL,
     `Data` date NOT NULL,
     `Agente` int(11) NOT NULL,
     `Proposta` int(11) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `AutHistorico_Situacao` (`Situacao`),
     CONSTRAINT `FK_Situacao` FOREIGN KEY (`Situacao`) REFERENCES `sicor`.`tb_AutSituacao` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    

    另外请注意,您不必在创建表后定义约束,而是可以将其包含在创建定义中,如上所示。

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 2018-04-14
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2012-02-19
      相关资源
      最近更新 更多