当默认存储引擎数据库为 MyIsam 时,使用 InnoDB 引擎的表是否会损坏?

Do tables with InnoDB engines can be corrupted when the default storage engine database is MyIsam?

我正在开发一个电子商务网站,我在我的数据库中为我的 table 关系使用外键。所以我决定对 MySQL 中的所有 table 使用 InnoDB 引擎。但是我的托管服务器使用 MyIsam 作为默认存储引擎数据库,我无法将其更改为 InnoDB。有一天,我使用 InnoDB 引擎的数据库中的一个 table 被损坏并出错。它说“ table 不存在于引擎中”。

我已经询问过托管客服,但他们无法给我解决方案。 是否因为 table 和数据库之间的引擎不同而无法访问我的 table?因为我的所有 table 都使用 InnoDB 作为引擎,但我的数据库默认存储引擎使用 MyIsam。

请给我一些解释,说明我的问题是如何解决的,也许还有解决办法。谢谢。

默认存储引擎只有在您创建 table 时才相关,但您没有明确声明该引擎。

// uses the default storage engine:
CREATE TABLE mytable ( ... );

// uses innodb storage engine, regardless of default:
CREATE TABLE mytable ( ... ) ENGINE=InnoDB;

如果你用 ENGINE=InnoDB 声明你的 table,它会保持这种状态。将默认存储引擎更改为 MyISAM 应该不会对现有的 tables 产生任何影响。它仅影响随后创建的 table,并且仅当它们未指定引擎时。

错误 "table does not exist in engine" 当您尝试查询 table 但 table 空间已被 ALTER TABLE mytable DISCARD TABLESPACE 丢弃时,或者如果 .ibd文件已从文件系统中删除。

这意味着有人破坏了您的数据。除非您有备份,否则现在无法恢复。

自 2010 年以来,InnoDB 一直是默认的存储引擎。是时候将其视为处理 MySQL 中数据的主要方式了。

希望您能找到新的托管服务提供商。