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

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)


翻阅古今
浏览 1357回答 3
3回答

犯罪嫌疑人X

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

MMMHUHU

您可以通过运行SHOW ENGINE INNODB STATUS;然后寻找LATEST FOREIGN KEY ERROR在输出中。资料来源:另一个用户在类似问题中的回答

慕慕森

我认为所有这些答案虽然正确,但对这个问题是误导的。如果要用外键恢复转储文件,则实际答案是在启动还原之前:SET FOREIGN_KEY_CHECKS=0;因为恢复自然会在外部表存在之前创建一些约束。
打开App,查看更多内容
随时随地看视频慕课网APP