我正在开发一个电子商务网站,并且我正在使用外键来表示数据库中的表关系。所以我决定对 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 中数据的主要方式了。
我希望您能找到新的托管提供商。
关于mysql - 当默认存储引擎数据库是MyIsam时,InnoDB引擎的表会被损坏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620551/