繁体   English   中英

当默认存储引擎数据库是MyIsam时,InnoDB引擎的表是否会被破坏?

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

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

我已经要求托管客户服务,但他们无法给我解决方案。 由于表和数据库之间的引擎不同,我的表是否无法访问? 因为我的所有表都使用InnoDB作为引擎,但我的数据库默认存储引擎正在使用MyIsam。

请给我一些解释如何以及解决我的问题的方法。 谢谢。

默认存储引擎仅在您创建表时才相关,但您未明确声明引擎。

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

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

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

当您尝试查询表但是已使用ALTER TABLE mytable DISCARD TABLESPACE丢弃表空间,或者已从文件系统中删除.ibd文件时,会发生错误“表不存在于引擎中”。

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

自2010年以来,InnoDB一直是默认的存储引擎。现在是时候将它作为处理MySQL数据的主要方式。

我希望你会找到一个新的托管服务提供商。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM