mysql - 当默认存储引擎数据库是MyIsam时,InnoDB引擎的表会被损坏吗?

标签 mysql innodb 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 中数据的主要方式了。

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

关于mysql - 当默认存储引擎数据库是MyIsam时,InnoDB引擎的表会被损坏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620551/

相关文章:

mysql - 选择具有表和查找表中的条目的用户

php - 什么情况下黑客会拿到表,却拿不到PHP代码?

mysql如何在另一个子查询中访问子查询生成的临时表?

mysql - DB 不再插入,ibdata1 4GB(最大文件大小?)

mysql - 将所有数据库表引擎更改为 InnoDB

php - MySQL 的最佳配置? InnoDB 和 MyISAM

MySQL Analyze and Optimize - 如果只有插入,是否需要它们 - 并且表没有连接?

python - python中连接mysql函数错误

mysql - 选择更新

python - 使用 innondb 引擎从 python 脚本插入 mysql 数据库中的问题