我正在开发一个电子商务网站,并且正在使用外键处理数据库中的表关系。因此,我决定对MySQL中的所有表使用InnoDB引擎。但是我的托管服务器使用MyIsam作为默认存储引擎数据库,因此无法将其更改为InnoDB。有一天,我的数据库中有一个带有InnoDB引擎的表已损坏并出错。它说“引擎中不存在表”。
我已请求托管客户服务,但他们无法给我解决方案。 是否由于表和数据库之间的引擎不同而无法访问我的表?因为我所有的表都使用InnoDB作为引擎,但是我的数据库默认存储引擎使用的是MyIsam。
请给我一些有关如何解决我的问题的解释。谢谢。
答案 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中数据的主要方法。
我希望您会找到新的托管服务提供商。