【问题标题】:mysql cannot create table errno 150mysql 无法创建表 errno 150
【发布时间】:2016-06-08 03:08:40
【问题描述】:

我正在使用 mysql innodb 引擎,在创建外键的过程中 mysql 崩溃了。现在我的表不存在,当我再次尝试创建它时,我收到错误 150。我知道这个错误与约束有一些关系,但我真的不知道如何重新创建表。我试图用相同的字段重新创建,但什么也没有。此外,我删除了以“#sql-*.frm”开头的表,但什么也没有。我真的不知道 innodb 在哪里存储有关损坏表及其约束的信息。请帮助如何重新创建表。

更新:

使用 SHOW ENGINE INNODB STATUS 后,我得到了:

最新的外键错误

160225 11:50:49 表 mesavis/furnace_report 的外键约束出错: 表中没有将包含的索引 列作为第一列,或 表与引用表中的不匹配 或 ON ... SET NULL 列之一被声明为 NOT NULL。约束: , CONSTRAINT "furnace_report_ibfk_2" FOREIGN KEY ("FK_treatment") REFERENCES "treatment" ("ID") ON DELETE CASCADE

但是当我尝试做 ALTER TABLE 炉报告 DROP FOREIGN KEY 炉报告 ibfk_2;我得到那个表熔炉报告不存在

如何删除那些损坏的约束,例如炉子报告 ibfk_2。它们必须放在某个地方。

【问题讨论】:

  • 我不敢相信还没有人解决这个问题。我不想从一开始就重新创建数据库,因为一个约束以某种方式遗留下来。必须有一些特殊的表或一些文件,我可以在其中更改和删除此约束,以便可以再次创建表。

标签: mysql database innodb


【解决方案1】:

InnoDB monitor 可以在收到上述错误消息后告诉您是什么约束导致了问题。有关预期输出,请参阅链接页面中示例输出中的“最新外键错误”部分。

由于您提到您有以#sql 开头的 .frm 文件,因此您可能在 innodb 数据字典中也有孤立表。请参阅innodb troubleshooting 上的 mysql 文档,了解如何删除此类表。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 2010-12-17
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2013-07-22
    • 2013-12-30
    相关资源
    最近更新 更多