确认 MySQL 服务器的存储引擎的方法是什么?

首先

这完全是为了自己而建立的备忘录。
在年末年初有较多的时间,开始学习SQL和MySQL服务器,所以打算逐渐记录下所学的内容。

由于在互联网上已经有大量重复的笑话,所以这不仅是重复造轮子,更像是过剩生产轮子的感觉。但我加上了术语表和详细的命令执行结果,给人一种超值的感觉。

用語集的中文本土化翻譯

数据库管理系统:
MySQL和MariaDB等被称为DB服务器的中间件。
数据库:
表的集合。可以想象为Excel中的“工作簿”。
表:
结构化数据的集合。可以想象为Excel中的“工作表”。

请温柔地看待把Excel类比为例子的初学者。

SQL:
一种用于操作数据库管理系统的语言。
存储引擎:
一种用于读写表数据的机制。
即使在同一个数据库中,每个表也可以拥有不同的存储引擎。

关于存储引擎的内容可以再多说一点。

默认存储引擎

MySQL服务器的默认存储引擎由配置文件规定,如果配置文件中没有任何设置,则取决于版本。可以通过”show engines;”命令来确认。在下面的示例中,默认存储引擎是InnoDB。

MariaDB [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)

MariaDB [(none)]>

现有的表格存储引擎

绑定到已创建的Table的引擎保存在名为 information_schema 的数据库内的 table 表中。其中 table_schema 表示数据库名称,table_name 表示表名称,engine 表示使用的存储引擎名称。由于这样描述可能不太清楚,我们可以实际操作一下。

登录

[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

因为这是用来自学的,所以请以温和的眼光看待。

在Jinnai73_Qiita账户下创建一个名为Test1的项目。

MariaDB [(none)]> create database Jinnai73_Qiita;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Jinnai73_Qiita     |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> use Jinnai73_Qiita
Database changed
MariaDB [Jinnai73_Qiita]> create table Test1 (id int, name varchar(32));
Query OK, 0 rows affected (0.05 sec)

MariaDB [Jinnai73_Qiita]> show tables;
+--------------------------+
| Tables_in_Jinnai73_Qiita |
+--------------------------+
| Test1                    |
+--------------------------+
1 row in set (0.00 sec)

MariaDB [Jinnai73_Qiita]>

完成了。

请确认存储引擎

MariaDB [Jinnai73_Qiita]> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [information_schema]> select table_schema, table_name, engine from tables where table_schema = 'Jinnai73_Qiita';
+----------------+------------+--------+
| table_schema   | table_name | engine |
+----------------+------------+--------+
| Jinnai73_Qiita | Test1      | InnoDB |
+----------------+------------+--------+
1 row in set (0.00 sec)

MariaDB [information_schema]>

数据库已经正确地转换为InnoDB引擎。

最后

我计划在与其他学习同时,集中学习一段时间的SQL(和MySQL)。虽然之前一直有对数据库服务器感到害怕,但我发现学习SQL出乎意料地有趣。


(2017/5/20更新)
因为”SQL服务器”指的是微软产品”SQL Server”,所以我已经更正为”MySQL服务器”。非常感谢您的指正m(_ _)m