如何检查特定表的MySQL引擎类型?

478

我的MySQL数据库包含多个使用不同存储引擎(具体来说是MyISAM和InnoDB)的表。如何查询哪些表使用了哪种引擎?

14个回答

602
SHOW TABLE STATUS WHERE Name = 'xxx'

这将为您提供(除其他外)一个名为Engine的列,这正是您想要的。


5
如果我的表格损坏了,它只会显示Engine=NULL并显示“评论”告诉我修复该表格。然而,在我知道如何修复表格之前,我猜想需要知道引擎(说实话,我还没有那么深入)。因此,@Jocker下面的评论对我更有帮助。 - harperville
@Greg,我们应该使用这个方案还是Jocker的方案? - Pacerier
@Pacerier - 两种方法都可以正常工作。不同之处在于,这个解决方案提供了一个表的信息,而Jocker的解决方案显示了数据库中所有表的引擎类型(同时更易读)。 - kramer65
@Greg,顺便问一下,为什么我们执行 show full columns from t1 命令时引擎信息没有显示出来呢? - Pacerier

297

要显示数据库中所有表及其引擎的列表,请使用此SQL查询:

SELECT TABLE_NAME,
       ENGINE
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'dbname';

dbname替换为您的数据库名称。


5
这很棒,因为它可以过滤掉除表名和引擎以外的所有内容。 - Tone
2
要获取特定表的引擎,您可以使用以下代码:SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '' AND TABLE_NAME = '' - userlond
1
这在MySQL 5.6.37上给我一个空集。 - nnyby
4
这是一个更好的答案,因为它使用真正的SQL语句,这样我就可以执行COUNT(*)GROUP BY等操作。 - Brandon

57
SHOW CREATE TABLE <tablename>;

SHOW TABLE STATUS比较易于解析,但不如本文所介绍的方式易读。


54

或者只需运行以下代码:

show table status;

这将列出您的数据库中所有表及其相关细节。


2
@NikolaiSamteladze,你选择的数据库中有表格吗? - Pacerier
最好和最简单的方法! - Zia Yamin

21

对Jocker的回答进行了一些微调(我想以评论的形式发布,但我还没有足够的威望):

SELECT TABLE_NAME, ENGINE
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = 'database' AND ENGINE IS NOT NULL;

这将排除 MySQL 视图列表,因为它们没有引擎。


11

展示数据库中所有表的状态:show table status from database_name;

以上命令将列出所提到数据库中的所有表。
举例:

mysql数据库的示例输出

展示特定表的存储引擎:show table status where name=your_desired_table_name;

以上命令将展示所提到表所使用的存储引擎。


10
SHOW CREATE TABLE <tablename>\G

相比于输出结果,它会使格式更加美观。

SHOW CREATE TABLE <tablename>;

\G技巧在许多其他查询/命令中也很有用。


1
\G hack 只适用于 cli mysql。 - gaRex
非常好的解决方案,谢谢。 - Christian LSANGOLA

8
mysqlshow -i <database_name>

将会展示一个特定数据库中所有表的信息。

mysqlshow -i <database_name> <table_name> 

只针对特定的表进行操作。

5
如果您正在使用MySQL Workbench,右键单击表并选择alter table。在该窗口中,您可以查看表的引擎并进行更改。


3

以下是获取单个或匹配表格状态的可能是最短的另一种方法:

SHOW TABLE STATUS LIKE 'table';

你可以使用LIKE操作符,例如:
SHOW TABLE STATUS LIKE 'field_data_%';

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