我如何知道mysql表是否使用myISAM或InnoDB Engine?


Answers:


134

如果使用SHOW CREATE TABLE,则必须从查询中解析引擎。

从INFORMATION_SCHEMA数据库中进行选择是不明智的做法,因为开发人员保留随时更改其架构的权利(尽管可能性不大)。

正确使用的查询是SHOW TABLE STATUS-您可以获取数据库中所有表的信息:

SHOW TABLE STATUS FROM `database`;

或针对特定表:

SHOW TABLE STATUS FROM `database` LIKE 'tablename';

您将返回的专栏之一是Engine。


+1,除非您始终有权查看您有权访问的对象的信息模式。
Konerak 2010年

@Konerak啊,很正确-我会改正答案。顺便说一句,我看到了一些错误,这些错误在人们具有正确权限的情况下无法从information_schema中进行选择。
TehShrike 2010年

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

仅需注意,INFORMATION_SCHEMA中的数据已缓存,因此最好在您提供的语句之前使用FLUSH TABLES
OMG Ponies 2010年

它可以帮助我计算数据库中InnoDB表的数量。
Anon30

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.