MySQL 如何在MySQL中显示所有数据库,并为每个数据库显示所有表?
在MySQL中,有时候我们需要查看当前MySQL实例中都有哪些数据库,以及每个数据库下都有哪些表。本文将介绍如何使用MySQL自带的命令来实现这个功能。
阅读更多:MySQL 教程
显示所有数据库
要显示所有的数据库,我们可以使用SHOW DATABASES命令。
SHOW DATABASES;
这个命令会返回一个结果集,其中包含了当前MySQL实例下所有的数据库名。
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
| testdb2 |
+--------------------+
在这个结果集中,每一行都代表一个数据库。如果我们想要对这个结果集进行排序,可以使用ORDER BY子句,比如:
SHOW DATABASES ORDER BY Database DESC;
这个命令会按照数据库名倒序排序。
显示所有表
要显示某个数据库中所有的表,我们需要先选择这个数据库,然后使用SHOW TABLES命令。
USE testdb;
SHOW TABLES;
这个命令会返回一个结果集,其中包含了testdb数据库下所有的表名。
+------------------+
| Tables_in_testdb |
+------------------+
| customers |
| orders |
+------------------+
在这个结果集中,每一行都代表一个表。如果我们想要对这个结果集进行排序,可以使用ORDER BY子句,比如:
SHOW TABLES ORDER BY Tables_in_testdb ASC;
这个命令会按照表名升序排序。
显示所有数据库及其表
要显示当前MySQL实例下所有的数据库名称以及每个数据库下所有的表名,我们可以先使用SHOW DATABASES命令,然后使用一个循环来遍历所有的数据库,对于每个数据库,使用USE命令来选择它,然后用SHOW TABLES命令来显示这个数据库下所有的表名。
以下是一个示例代码:
SET @query = '';
SELECT GROUP_CONCAT(query SEPARATOR '\n') INTO @query
FROM (
SELECT CONCAT('USE `', Database, '`;') AS `query`, 1 AS `sort_order`
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema')
ORDER BY SCHEMA_NAME
UNION ALL
SELECT CONCAT('SELECT \'', Database, '\' AS `Database`, \'', Table_name, '\' AS `Table` FROM `', Table_name, '`;') AS `query`, 2 AS `sort_order`
FROM information_schema.`TABLES`
WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema')
ORDER BY TABLE_SCHEMA
) AS t
ORDER BY sort_order, query;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这个代码使用了MySQL的系统表INFORMATION_SCHEMA.SCHEMATA和information_schema.TABLES来获取当前MySQL实例下所有的数据库名称和每个数据库下所有的表名称。其中,INFORMATION_SCHEMA.SCHEMATA表包含了所有的数据库列表及其相关信息,information_schema.TABLES表包含了所有的表列表及其相关信息。通过UNION ALL将两个列表合并,得到一个结果集。通过GROUP_CONCAT函数将这个结果集中所有的查询语句拼接起来,然后使用PREPARE和EXECUTE语句执行这个查询语句,即可得到所有的数据库及其表信息。
结论
通过使用SHOW DATABASES、SHOW TABLES和MySQL的系统表INFORMATION_SCHEMA.SCHEMATA和information_schema.TABLES,我们可以很容易地显示当前MySQL实例下所有的数据库名称以及每个数据库下所有的表名称。以上就是本文所介绍的全部内容。