MySQL - 选择数据库
MySQL:使用 USE 语句选择数据库
Section titled “MySQL:使用 USE 语句选择数据库”与 MySQL 服务器建立连接后,您的第一步通常是指定要使用的数据库。单个 MySQL 服务器可以托管多个数据库,因此您必须选择一个数据库来执行诸如创建表、查询数据或管理记录之类的操作。
The USE Statement
Section titled “The USE Statement”用于选择数据库的主要 SQL 命令是 USE 语句。一旦选择了一个数据库,该会话中的所有后续 SQL 命令(例如 CREATE TABLE、SELECT、INSERT 等)都将在该数据库的上下文中执行。
USE 语句的语法非常简单:
USE database_name;在这里,database_name 是您希望在当前会话中激活的数据库名称。数据库名称在关系型数据库管理系统(RDBMS)中必须是唯一的。
示例:创建和选择数据库
Section titled “示例:创建和选择数据库”让我们来看一个完整的例子。首先,我们创建一个名为 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 语句。
最佳实践:连接配置
Section titled “最佳实践:连接配置”以下是在各种语言中通过连接字符串或配置对象选择数据库的方法,这是推荐的方法。
PythonNode.jsJavaPHP
在 Python 中,使用 `mysql-connector-python` 库时,在连接期间通过 `database` 参数指定数据库名称。
import mysql.connectorfrom 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