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

one*_*elf 371 mysql myisam innodb

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

Gre*_*reg 482

SHOW TABLE STATUS WHERE Name = 'xxx'

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

  • 如果我的表被损坏,它只是显示Engine = NULL并有一个"Comment"告诉我修复表.然而,在我知道如何修复表之前,我猜我需要知道引擎(说实话我没有那么远.)因此,@ Jocker的评论对我来说更有帮助. (4认同)

小智 228

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

SELECT TABLE_NAME,
       ENGINE
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'dbname';
Run Code Online (Sandbox Code Playgroud)

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

  • 这很棒b/c它会过滤除tablename和引擎之外的所有内容. (3认同)
  • 要获取特定表的引擎,您可以使用:`SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'` (2认同)
  • 这是一个更好的答案,因为它是真正的 SQL,所以我可以做诸如 `COUNT(*)` 和 `GROUP BY` 之类的事情。 (2认同)

Jav*_*ier 47

SHOW CREATE TABLE <tablename>;
Run Code Online (Sandbox Code Playgroud)

不易解析但更易读SHOW TABLE STATUS.


小智 40

要不就

show table status;

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

  • @NikolaiSamteladze,你有选择数据库中的表吗? (2认同)

Eva*_*van 15

对Jocker的回应有点调整(我会发表评论,但我还没有足够的业力):

SELECT TABLE_NAME, ENGINE
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = 'database' AND ENGINE IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

这会从列表中排除MySQL视图,这些视图没有引擎.


Nic*_*las 9

SHOW CREATE TABLE <tablename>\G
Run Code Online (Sandbox Code Playgroud)

与输出相比,它的格式会更好

SHOW CREATE TABLE <tablename>;
Run Code Online (Sandbox Code Playgroud)

\G对于许多其他查询/命令,这个技巧也很有用.


小智 7

mysqlshow -i <database_name>
Run Code Online (Sandbox Code Playgroud)

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

mysqlshow -i <database_name> <table_name> 
Run Code Online (Sandbox Code Playgroud)

将只为特定的表格这样做.


zah*_*hid 7

从 database_name 显示表状态;

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

mysql db 的示例输出

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

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


T30*_*T30 5

如果您使用MySQL Workbench,请右键单击表并选择alter table

在该窗口中,您可以看到您的表引擎并对其进行更改。