如何知道数据库使用的存储引擎?


13

以前,在创建的每个数据库上,我使用:

mysql -u root -p
CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL ON dbname.* TO 'dbuser'@'localhost';

然后使用数据库而无需考虑MyISAM或InnoDB

如何知道数据库使用的存储引擎?

Answers:


14

您可以像这样检查每个表:

USE <database>;
SHOW TABLE STATUS\G

您将获得以下内容的输出:

root@localhost/database> show table status\G
*************************** 1. row ***************************
           Name: tablename
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 101
 Avg_row_length: 70
    Data_length: 7070
Max_data_length: 19703248369745919
   Index_length: 2048
      Data_free: 0
 Auto_increment: 1004
    Create_time: 2009-12-07 20:15:53
    Update_time: 2010-11-10 21:55:01
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 

您知道以任何方式来处理数据库中的所有表(除了SHOW TABLE为数据库中的每个表编写脚本之外)?
voretaq7 2011年

2
@ voretaq7默认情况下,“ SHOW TABLE STATUS”确实显示所有表。
合作社2011年

很酷-我是Postgres家伙,所以所有这些MySQL和多个存储引擎的东西对我来说都很奇怪:-)
voretaq7 2011年

5

使用“ show engine”命令查看活动的默认引擎

在my.cnf文件的[mysqld]部分中添加default-storage-engine = InnoDB,以使默认引擎处于活动状态。

使用“ show create table table_name”命令查看表中的默认引擎。


SHOW ENGINE给我错误1064(42000)。
mstrap

1
show engines;
w00t

4

该查询列出了MySQL中的所有InnoDB表及其数据库:

SELECT table_name, table_schema 
FROM information_schema.tables 
WHERE engine = 'InnoDB';

您还可以列出所有表及其存储引擎:

SELECT table_name, table_schema, engine
FROM information_schema.tables;

我尝试了第二个查询-我收到错误:(ERROR 1146 (42S02): Table 'information_scheme.tables' doesn't exist 在MySQL 5.6.37上)
nnyby

1

获取特定表的引擎名称

use <database_name>
show table status like '<table_name>';

更换引擎

alter table <table_name> engine <engine_name>;
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.