MySQL - 显示数据库
MySQL - 列出数据库
Section titled “MySQL - 列出数据库”SHOW DATABASES 语句
Section titled “SHOW DATABASES 语句”在 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_%';替代方法:SHOW SCHEMAS
Section titled “替代方法:SHOW SCHEMAS”在 MySQL 中,SCHEMA 是 DATABASE 的同义词。因此,SHOW SCHEMAS 命令在功能上与 SHOW DATABASES 完全相同。
SHOW SCHEMAS;此命令将产生与 SHOW DATABASES 完全相同的输出。
标准方法:查询 information_schema
Section titled “标准方法:查询 information_schema”检索数据库元数据的一种更标准化、更灵活的方法是查询 information_schema。这是一个特殊的数据库,包含所有其他数据库的信息。这种方法是 SQL 标准的一部分,并且在不同的数据库系统之间更具可移植性。
SELECT schema_name FROM information_schema.SCHEMATA;此查询为您提供相同的数据库名称列表,但允许进行更复杂的过滤、排序和与其他元数据表的连接,提供了比简单 SHOW 命令更强大的功能。
从应用程序代码列出数据库
Section titled “从应用程序代码列出数据库”您也可以从应用程序中以编程方式列出数据库。一如既往,请使用现代、安全的编码实践。
现代客户端程序示例
Section titled “现代客户端程序示例”PHPNodeJSJavaPython
此示例使用 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.connectorfrom 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 的一项基本安全功能。