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

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

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

显示数据库的命令

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

SHOW DATABASES;

或者

SHOW SCHEMAS;

SHOW SCHEMAS 是 SHOW 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 数据库服务器的所有的数据库列表的两种方法:

使用 SHOW DATABASES 命令

从 information_schema.schemata 表中查询。此表中包含了比 SHOW DATABASES 更多的信息。