为了账号安全,请及时绑定邮箱和手机立即绑定

MySql错误150-外键

MySql错误150-外键

桃花长相依 2020-02-01 16:29:50
当我执行以下两个查询时(我将它们简化为绝对必要):mysql> CREATE TABLE foo(id INT PRIMARY KEY);Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE bar ( id INT, ref INT, FOREIGN KEY (ref) REFERENCES foo(id)) ENGINE InnoDB;我收到以下错误:错误1005(HY000):无法创建表'./test/bar.frm'(errno:150)我的错误在哪里?半个小时盯着我看,我还没找到他。
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

来自FOREIGN KEY约束


如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150。


我怀疑这是因为您没有创建foo为InnoDB,因为其他一切看起来都还可以。


编辑:从同一页面-


两个表都必须是InnoDB表,并且不能是TEMPORARY表。


查看完整回答
反对 回复 2020-02-01
?
当年话下

TA贡献1890条经验 获得超9个赞

您可以使用该命令SHOW ENGINE INNODB STATUS来获取有关该错误的更多特定信息。


它将为您提供Status包含大量文本的列的结果。


查找名为LATEST FOREIGN KEY ERROR的部分,例如,可能看起来像这样:


------------------------

LATEST FOREIGN KEY ERROR

------------------------

190215 11:51:26 Error in foreign key constraint of table `mydb1`.`contacts`:

Create  table `mydb1`.`contacts` with foreign key constraint failed. You have defined a SET NULL condition but column 'domain_id' is defined as NOT NULL in ' FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE SET NULL ON UPDATE CASCADE,

    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT' near ' ON DELETE SET NULL ON UPDATE CASCADE,

    CONSTRAINT contacts_teams_id_fk FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE SET NULL ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT'.


查看完整回答
反对 回复 2020-02-01
?
HUWWW

TA贡献1874条经验 获得超12个赞

要创建外键,

  1. 主列和参考列都必须具有相同的定义。

  2. 两个表引擎必须是InnoDB。

您可以使用此命令更改表的引擎,请在执行此命令之前进行备份。

alter table [表名] ENGINE = InnoDB;


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 682 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信