3 回答
TA贡献1982条经验 获得超2个赞
来自FOREIGN KEY约束
如果重新创建已删除的表,则该表必须具有符合引用该表的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL将返回错误号1005,并在错误消息中引用错误150。
我怀疑这是因为您没有创建foo为InnoDB,因为其他一切看起来都还可以。
编辑:从同一页面-
两个表都必须是InnoDB表,并且不能是TEMPORARY表。
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'.
TA贡献1874条经验 获得超12个赞
要创建外键,
主列和参考列都必须具有相同的定义。
两个表引擎必须是InnoDB。
您可以使用此命令更改表的引擎,请在执行此命令之前进行备份。
alter table [表名] ENGINE = InnoDB;
添加回答
举报