Skip to content

MySQL - 选择数据库

与 MySQL 服务器建立连接后,您的第一步通常是指定要使用的数据库。单个 MySQL 服务器可以托管多个数据库,因此您必须选择一个数据库来执行诸如创建表、查询数据或管理记录之类的操作。

用于选择数据库的主要 SQL 命令是 USE 语句。一旦选择了一个数据库,该会话中的所有后续 SQL 命令(例如 CREATE TABLE、SELECT、INSERT 等)都将在该数据库的上下文中执行。

USE 语句的语法非常简单:

USE database_name;

在这里,database_name 是您希望在当前会话中激活的数据库名称。数据库名称在关系型数据库管理系统(RDBMS)中必须是唯一的。

让我们来看一个完整的例子。首先,我们创建一个名为 ACME_CORP 的新数据库。

CREATE DATABASE ACME_CORP;

要验证其创建并查看所有可用数据库,您可以运行 SHOW DATABASES;:

SHOW DATABASES;

输出将列出所有数据库,包括我们刚刚创建的数据库:

数据库
information_schema
acme_corp
mysql
performance_schema
sys

现在,选择 ACME_CORP 数据库,使其成为活动上下文(active context):

USE ACME_CORP;

如果成功,MySQL 将确认更改:

Database changed

选择了 ACME_CORP 后,您现在可以创建表了。例如,我们来创建一个 employees 表:

CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
hire_date DATE
) ENGINE=InnoDB CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

运行 SHOW TABLES; 现在将列出 ACME_CORP 数据库中的表。

SHOW TABLES;

输出:

acme_corp 中的表
employees

常见错误:选择不存在的数据库

Section titled “常见错误:选择不存在的数据库”

尝试 USE 一个不存在的数据库将导致错误。

USE NonExistentDB;

MySQL 将返回特定的错误代码和消息:

ERROR 1049 (42000): Unknown database 'nonexistentdb'

在应用程序代码(客户端程序)中选择数据库

Section titled “在应用程序代码(客户端程序)中选择数据库”

尽管 USE 在命令行客户端中很有用,但在应用程序代码中,最佳实践是在连接配置中直接指定数据库。这更高效,并避免了潜在的状态相关错误。然而,如果需要,您仍然可以执行 USE 语句。

以下是在各种语言中通过连接字符串或配置对象选择数据库的方法,这是推荐的方法。

Python
Node.js
Java
PHP
在 Python 中,使用 `mysql-connector-python` 库时,在连接期间通过 `database` 参数指定数据库名称。
import mysql.connector
from mysql.connector import errorcode
try:
# 推荐:在连接配置中指定数据库
cnx = mysql.connector.connect(
user='root',
password='your_password',
host='127.0.0.1',
database='ACME_CORP'
)
print("连接成功。已选择数据库 'ACME_CORP'。")
cursor = cnx.cursor()
cursor.execute("SHOW TABLES;")
print("表:", cursor.fetchall())
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("认证失败:用户名或密码不正确")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("数据库不存在")
else:
print(err)
finally:
if 'cnx' in locals() and cnx.is_connected():
cursor.close()
cnx.close()
print("MySQL 连接已关闭")
输出
连接成功。已选择数据库 'ACME_CORP'。
表: [('employees',)]
MySQL 连接已关闭
在 Node.js 中使用 `mysql2` 库时,连接选项中的 `database` 属性是标准方法。
const mysql = require('mysql2/promise');
async function main() {
let connection;
try {
// 推荐:在连接配置中指定数据库
connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your_password',
database: 'ACME_CORP'
});
console.log("成功连接到 'ACME_CORP' 数据库。");
const [rows, fields] = await connection.execute('SHOW TABLES;');
console.log('找到的表:', rows.map(row => Object.values(row)[0]));
} catch (error) {
console.error(`连接或查询失败: ${error.message}`);
} finally {
if (connection) {
await connection.end();
console.log('连接已关闭。');
}
}
}
main();
输出
成功连接到 'ACME_CORP' 数据库。
找到的表: [ 'employees' ]
连接已关闭。
在 Java 中,使用 JDBC 时,数据库名称附加到连接 URL 后。这是标准且最可靠的方法。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class SelectDatabase {
// 推荐:在 JDBC URL 中指定数据库
static final String DB_URL = "jdbc:mysql://localhost:3306/ACME_CORP";
static final String USER = "root";
static final String PASS = "your_password";
public static void main(String[] args) {
// 使用 try-with-resources 进行自动资源管理
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement()) {
System.out.println("连接成功。通过 URL 选择了数据库 'ACME_CORP'。");
// 您现在可以直接执行查询
try (ResultSet rs = stmt.executeQuery("SHOW TABLES;")) {
System.out.println("数据库中的表:");
while (rs.next()) {
System.out.println("- " + rs.getString(1));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
输出
连接成功。通过 URL 选择了数据库 'ACME_CORP'。
数据库中的表:
- employees
在 PHP 中,使用现代的 `mysqli` 面向对象接口时,数据库名称作为第四个参数传递给构造函数。
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'your_password';
// 推荐:在连接配置中指定数据库
$dbname = 'ACME_CORP';
// 创建连接
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
// 检查连接
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
echo "连接成功。已选择数据库 '$dbname'。<br>";
// 另一种(不常用)方法:使用 USE 语句
// $mysqli->query("USE ACME_CORP");
$sql = "SHOW TABLES;";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
echo "找到的表:<br>";
while($row = $result->fetch_assoc()) {
echo "- " . $row["Tables_in_acme_corp"] . "<br>";
}
} else {
echo "未找到表";
}
$mysqli->close();
?>
输出
连接成功。已选择数据库 'ACME_CORP'。
找到的表:
- employees