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

时间:2019-06-16 16:08:59

标签: mysql innodb myisam

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

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

请给我一些有关如何解决我的问题的解释。谢谢。

1 个答案:

答案 0 :(得分:0)

仅当您创建表时,默认存储引擎才有意义,但您没有明确声明该引擎。

// 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中数据的主要方法。

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