在 MySQL 中使用 SHOW DATABASES 列出所有数据库

本文介绍了在 MySQL 中列出所有数据库的两种方法:SHOW DATABASESinformation_schema.schemata 表。

作为一个数据库管理员或者维护人员,了解当前 MySQL 数据库服务器中有多少数据库是必备的技能。

MySQL 在 information_schema.schemata 表保存了所有的数据库信息,您可以直接从此表中查询,也可以使用 SHOW DATABASES 命令。

显示数据库的命令

要列出 MySQL 服务器主机上的所有数据库,您可以使用以下命令:

SHOW DATABASES;

或者

SHOW SCHEMAS;

SHOW SCHEMASSHOW DATABASES 的同义词,他们具有相同的返回结果。

如果运行此命令的用户不是超级用户,则只返回用户具有权限的数据库列表。

您还可以使用 LIKE 对结果进行过滤,如下:

SHOW DATABASES LIKE pattern;

实例:列出所有的数据库

让我们使用 root 运行以下命令以获取所有的数据库:

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| adam_test          |
| bags               |
| cad                |
| dc                 |
| information_schema |
| mysql              |
| native_test        |
| performance_schema |
| sakila             |
| sqlizdb            |
| sys                |
| testdb             |
+--------------------+

这里, root 用户为超级用户,因此他能查看所有的数据库。

让我们使用 sqliz 用户运行以下语句:

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| sqlizdb            |
+--------------------+

这里, sqliz 用户为普通用户,因此他只能查看具有权限的数据库。

实例:过滤数据库

下面的语句使用 LIKE 已返回所有的以 s 开头的数据库:

SHOW DATABASES LIKE 's%';
+---------------+
| Database (s%) |
+---------------+
| sakila        |
| sqlizdb       |
| sys           |
+---------------+

从表中查询数据库列表

MySQL 在 information_schema.schemata 表保存了所有的数据库信息,您可以直接在此表中查询以获取所有的数据列表。

实际上, SHOW DATABASES 命令与下面的查询语句相同:

SELECT schema_name FROM information_schema.schemata;

让我们使用 root 运行上面的语句。下面是该语句的返回:

+--------------------+
| SCHEMA_NAME        |
+--------------------+
| mysql              |
| information_schema |
| performance_schema |
| sys                |
| cad                |
| bags               |
| adam_test          |
| dc                 |
| sakila             |
| testdb             |
| native_test        |
| sqlizdb            |
+--------------------+

如果您想要获取更多的信息,可以使用下面的语句:

SELECT * FROM information_schema.schemata;
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| def          | mysql              | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | information_schema | utf8                       | utf8_general_ci        |     NULL | NO                 |
| def          | performance_schema | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | sys                | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | cad                | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | bags               | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | adam_test          | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | dc                 | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | sakila             | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | testdb             | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | native_test        | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
| def          | sqlizdb            | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+

这里,返回了更多的信息,比如字符集,排序规则等。

结论

在本文中,您学习了获取 MySQL 数据库服务器的所有的数据库列表的两种方法:

  1. 使用 SHOW DATABASES 命令
  2. information_schema.schemata 表中查询。此表中包含了比 SHOW DATABASES 更多的信息。