MySql错误150-外键

当我执行以下两个查询时(我将它们简化为绝对必要):


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)


我的错误在哪里?半个小时盯着我看,我还没找到他。


桃花长相依
浏览 689回答 3
3回答

临摹微笑

来自FOREIGN KEY约束如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150。我怀疑这是因为您没有创建foo为InnoDB,因为其他一切看起来都还可以。编辑:从同一页面-两个表都必须是InnoDB表,并且不能是TEMPORARY表。

当年话下

您可以使用该命令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'.

HUWWW

要创建外键,主列和参考列都必须具有相同的定义。两个表引擎必须是InnoDB。您可以使用此命令更改表的引擎,请在执行此命令之前进行备份。alter table [表名] ENGINE = InnoDB;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL