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

MySQL:无法创建表(errno:150)

MySQL:无法创建表(errno:150)

翻阅古今 2019-07-02 11:04:49
MySQL:无法创建表(errno:150)我正在尝试导入一个.sql文件,它在创建表时失败了。以下是失败的查询:CREATE TABLE `data` (`id` int(10) unsigned NOT NULL,`name` varchar(100) NOT NULL,`value` varchar(15) NOT NULL,UNIQUE KEY `id` (`id`,`name`),CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1;    我从同一个数据库导出了.sql,删除了所有的表,现在我试图导入它,为什么它失败了?MySQL:无法创建表‘./dbName/data.frm’(errno:150)
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

MySQL-外键约束文档:

如果您重新创建一个被删除的表,它必须有一个符合引用它的外键约束的定义。如前面所述,它必须具有正确的列名和类型,并且必须在引用的键上有索引。如果不满足这些要求,MySQL将返回错误1005,并在错误消息中引用错误150,这意味着外键约束没有正确形成。类似地,如果ALTERTABLE由于错误150而失败,这意味着修改后的表将错误地形成外键定义。


查看完整回答
反对 回复 2019-07-02
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以通过运行SHOW ENGINE INNODB STATUS;然后寻找LATEST FOREIGN KEY ERROR在输出中。

资料来源:另一个用户在类似问题中的回答


查看完整回答
反对 回复 2019-07-02
?
慕慕森

TA贡献1856条经验 获得超17个赞

我认为所有这些答案虽然正确,但对这个问题是误导的。

如果要用外键恢复转储文件,则实际答案是在启动还原之前:

SET FOREIGN_KEY_CHECKS=0;

因为恢复自然会在外部表存在之前创建一些约束。


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

添加回答

举报

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