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


391

我的MySQL数据库包含使用不同存储引擎(特别是myisam和innodb)的几个表。如何找出哪些表正在使用哪个引擎?

Answers:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

这将给您(除其他事项外)一Engine列,这是您想要的。


4
如果我的表已损坏,它只会显示Engine = NULL并带有一个“注释”,告诉我要修复该表。但是,在我知道如何修理桌子之前,我猜想我需要知道发动机(说实话,我还没走那么远。)因此,@ Jocker在下面的评论对我有很大帮助。
harperville

@Greg,我们应该使用此解决方案还是Jocker的解决方案?
Pacerier

@Pacerier-都可以正常工作。不同之处在于该解决方案提供了一张表的信息,而Jocker的解决方案显示了数据库中所有表的引擎类型(同时也更具可读性)。
kramer65 '16

@Greg,顺便说一句,为什么我们不显示引擎信息show full columns from t1
Pacerier's

236

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

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

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


3
很棒的b / c可以过滤掉表名和引擎以外的所有内容。
Tone

1
要获取特定表的引擎,您可以使用: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond

1
这使我在MySQL 5.6.37上有一个空集。
nnyby

1
这是一个更好的答案,因为它是真正的SQL,所以我可以做类似COUNT(*)and的事情GROUP BY
布兰登

47
SHOW CREATE TABLE <tablename>;

比解析度差,但更易读SHOW TABLE STATUS


41

要不就

show table status;

只是这将列出数据库中的所有表。


2
@NikolaiSamteladze,您在所选数据库中有表吗?
Pacerier

15

对Jocker的回复进行了一些调整(我会发表评论,但我没有足够的业力):

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

这从列表中排除了没有引擎的MySQL视图。


9
SHOW CREATE TABLE <tablename>\G

相较于输出,格式会更好

SHOW CREATE TABLE <tablename>;

\G技巧对于记住许多其他查询/命令也很有用。


1
\ G hack仅在cli mysql下
gaRex

7
mysqlshow -i <database_name>

将显示特定数据库的所有表的信息。

mysqlshow -i <database_name> <table_name> 

只会针对特定的表格执行此操作。


1
这不会回答问题,因为它显示所有表的引擎。问题的发起者正在寻求有关特定表格的信息。
塔斯(Tass)2014年

4

显示来自数据库名称的表状态;

它将列出提到的数据库中的所有表。
输出示例

mysql db的示例输出

显示表状态,其中name = your_desired_table_name;

它将显示上述表使用的存储引擎。


3

如果您使用的是MySQL Workbench,则可以右键单击该表,然后选择“更改表”。

在该窗口中,您可以查看表引擎并进行更改。


2

还有另一种方法,也许是获得单个或匹配表集状态的最短方法:

SHOW TABLE STATUS LIKE 'table';

然后,您可以使用LIKE运算符,例如:

SHOW TABLE STATUS LIKE 'field_data_%';

2

如果您是Linux用户:

要显示一个MySQL服务器上的所有数据库中的所有表的引擎,没有桌子information_schemamysqlperformance_schema

less < <({ for i in $(mysql -e "show databases;" | cat | grep -v -e Database-e information_schema -e mysql -e performance_schema); do echo "--------------------$i--------------------";  mysql -e "use $i; show table status;"; done } | column -t)

至少在Linux上,您可能会喜欢这个。

将在中打开所有表格的所有信息less,按-S可截断长行。

输出示例:

--------------------information_schema--------------------
Name                                                        Engine              Version  Row_format  Rows   Avg_row_length  Data_length  Max_data_length     Index_length  Data_free  Auto_increment  Create_time  Update_time  Check_time  C
CHARACTER_SETS                                              MEMORY              10       Fixed       NULL   384             0            16434816            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATIONS                                                  MEMORY              10       Fixed       NULL   231             0            16704765            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATION_CHARACTER_SET_APPLICABILITY                       MEMORY              10       Fixed       NULL   195             0            16357770            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLUMNS                                                     MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
COLUMN_PRIVILEGES                                           MEMORY              10       Fixed       NULL   2565            0            16757145            0             0          NULL            2015-07-13   15:48:45     NULL        N
ENGINES                                                     MEMORY              10       Fixed       NULL   490             0            16574250            0             0          NULL            2015-07-13   15:48:45     NULL        N
EVENTS                                                      MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
FILES                                                       MEMORY              10       Fixed       NULL   2677            0            16758020            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_STATUS                                               MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_VARIABLES                                            MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
KEY_COLUMN_USAGE                                            MEMORY              10       Fixed       NULL   4637            0            16762755            0 

.
.
.

0

转到information_schema数据库,您将在其中找到“表”表,然后选择它;

Mysql>使用information_schema; Mysql>从表中选择table_name,engine;


0

如果您是GUI用户,并且只想在PhpMyAdmin中找到它,则可以选择您选择的表,然后转到Operations选项卡Table options>>>> Storage Engine。您甚至可以使用下拉选项列表从那里进行更改。

PS:本指南基于PhpMyAdmin的4.8版本。对于较旧的版本,无法保证使用相同的路径。

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.