Skip to content

MySQL - 显示数据库

在 MySQL 中,数据库(也称为 schema)是表、视图和其他数据库对象的容器。要查看您有权限访问的 MySQL 服务器上所有数据库的列表,您可以使用 SHOW DATABASES 语句。

语法很简单,带有用于过滤结果的可选子句:

SHOW DATABASES [LIKE 'pattern' | WHERE expression];

首先,我们创建一个新数据库以确保它出现在我们的列表中。

CREATE DATABASE my_project_db;

现在,执行 SHOW DATABASES 命令:

SHOW DATABASES;

输出是数据库名称列表。您的列表可能有所不同,但它会包含系统数据库和您刚刚创建的数据库。

数据库
information_schema
mysql
my_project_db
performance_schema
sys

您可以使用 LIKE 子句过滤此列表。例如,要查找所有以 ‘my_’ 开头的数据库:

SHOW DATABASES LIKE 'my_%';

在 MySQL 中,SCHEMA 是 DATABASE 的同义词。因此,SHOW SCHEMAS 命令在功能上与 SHOW DATABASES 完全相同。

SHOW SCHEMAS;

此命令将产生与 SHOW DATABASES 完全相同的输出。

检索数据库元数据的一种更标准化、更灵活的方法是查询 information_schema。这是一个特殊的数据库,包含所有其他数据库的信息。这种方法是 SQL 标准的一部分,并且在不同的数据库系统之间更具可移植性。

SELECT schema_name FROM information_schema.SCHEMATA;

此查询为您提供相同的数据库名称列表,但允许进行更复杂的过滤、排序和与其他元数据表的连接,提供了比简单 SHOW 命令更强大的功能。

您也可以从应用程序中以编程方式列出数据库。一如既往,请使用现代、安全的编码实践。

PHP
NodeJS
Java
Python
此示例使用 PDO 执行 `SHOW DATABASES` 命令并列出结果。
<?php
$host = '127.0.0.1';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';
// 注意:连接时未指定具体的数据库名
$dsn = "mysql:host=$host;charset=$charset";
$options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
$stmt = $pdo->query("SHOW DATABASES");
echo "Available Databases:\n";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "- " . $row['Database'] . "\n";
}
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
使用 `mysql2/promise` 和 `async/await` 列出服务器上的所有数据库。
const mysql = require('mysql2/promise');
async function listDatabases() {
let connection;
try {
connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
});
const [rows] = await connection.execute('SHOW DATABASES');
console.log('Available Databases:');
rows.forEach(row => {
console.log(`- ${row.Database}`);
});
} catch (err) {
console.error('Error:', err);
} finally {
if (connection) await connection.end();
}
}
listDatabases();
此 Java 示例连接到 MySQL 服务器,并使用 `ResultSet` 遍历数据库列表。
import java.sql.*;
public class ShowDatabases {
public static void main(String[] args) {
// 注意:URL 未指定数据库名称
String url = "jdbc:mysql://localhost:3306";
String user = "root";
String password = "password";
String sql = "SHOW DATABASES";
try (Connection con = DriverManager.getConnection(url, user, password);
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery()) {
System.out.println("Available Databases:");
while (rs.next()) {
System.out.println("- " + rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
此 Python 脚本连接到 MySQL 服务器,执行 `SHOW DATABASES`,并打印每个数据库的名称。
import mysql.connector
from mysql.connector import Error
def list_databases():
connection = None
try:
// 注意:初次连接时不要指定 'database'
connection = mysql.connector.connect(
host='localhost',
user='root',
password='password'
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
print("Available Databases:")
for db in cursor:
print(f"- {db[0]}")
except Error as e:
print(f"Error: {e}")
finally:
if connection and connection.is_connected():
cursor.close()
connection.close()
if __name__ == '__main__':
list_databases();

请务必记住,SHOW DATABASES 只列出当前用户拥有某种形式权限的数据库。管理员用户(如 root)将看到所有数据库,但受限用户只能看到他们被明确授予访问权限的数据库。这是 MySQL 的一项基本安全功能。