如何知道一个MySQL表是使用myISAM引擎还是InnoDB引擎?

95

在MySQL中,无法为特定的数据库指定存储引擎,只能为单个表进行指定。但是,在会话期间可以使用以下方式指定要使用的存储引擎:

SET storage_engine=InnoDB;

因此,您不需要为每个表单独指定它。

我如何确认是否确实所有的表都在使用InnoDB?


可能是重复的问题:如何检查特定表格的MySQL引擎类型? - Alastair Irvine
3个回答

153
如果您使用SHOW CREATE TABLE,则必须从查询中解析引擎。
从INFORMATION_SCHEMA数据库进行选择是不良实践,因为开发人员保留随时更改其模式的权利(尽管这不太可能)。
正确的查询是SHOW TABLE STATUS-您可以获取有关数据库中所有表的信息:
SHOW TABLE STATUS FROM `database`;

或者针对特定的表格:
SHOW TABLE STATUS FROM `database` LIKE 'tablename';

你将得到的其中一列是 Engine。


+1,除非您始终具有查看您具有权限的对象的信息模式的权限。 - Konerak
@Konerak 啊,确实如此 - 我会更正答案。另外,我见过一些“错误”,在这些情况下从information_schema中选择不起作用,即使人们拥有正确的权限。 - TehShrike

18
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'

唯一需要注意的是INFORMATION_SCHEMA中的数据被缓存,因此最好在提供的语句之前使用FLUSH TABLES - OMG Ponies
它可以帮助我计算数据库中InnoDB表的数量。 - Anon30

5

show create table <table> should do the trick.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接