1351 字
约 4 分钟
20
🎯 MySQL 选择数据库
2026-09-19
无标签

🎯 MySQL 选择数据库

数据库选择概述

在 MySQL 中,选择数据库是进行数据操作的前提步骤。通过 USE 语句可以指定当前会话要操作的数据库,之后的所有 SQL 操作都将在该数据库中执行。

USE 语句语法

基本语法

-- 选择数据库的基本语法
USE database_name;

-- 示例
USE my_database;
USE company_db;
USE test_schema;

查看当前数据库

-- 查看当前选择的数据库
SELECT DATABASE();

-- 或者使用
SELECT SCHEMA();

-- 查看当前连接信息
SELECT USER(), DATABASE(), VERSION();

数据库选择示例

基本选择操作

-- 1. 查看所有可用数据库
SHOW DATABASES;

-- 2. 选择特定数据库
USE company_database;

-- 3. 确认当前数据库
SELECT DATABASE();

-- 4. 查看数据库中的表
SHOW TABLES;

-- 5. 查看表结构
DESCRIBE table_name;

连接时指定数据库

# 命令行连接时直接指定数据库
mysql -u username -p database_name

# 示例
mysql -u root -p company_db
mysql -u admin -p -h localhost test_database

# 连接远程数据库并指定数据库
mysql -u username -p -h remote_host -P 3306 database_name

数据库信息查询

查看数据库列表

-- 显示所有数据库
SHOW DATABASES;

-- 显示匹配模式的数据库
SHOW DATABASES LIKE 'test%';
SHOW DATABASES LIKE '%_db';

-- 使用 WHERE 子句过滤
SHOW DATABASES WHERE `Database` NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');

查看数据库详细信息

-- 查看数据库创建语句
SHOW CREATE DATABASE database_name;

-- 查看数据库字符集和排序规则
SELECT 
    SCHEMA_NAME as 'Database',
    DEFAULT_CHARACTER_SET_NAME as 'Charset',
    DEFAULT_COLLATION_NAME as 'Collation'
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'database_name';

-- 查看数据库大小
SELECT 
    table_schema AS 'Database',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables 
WHERE table_schema = 'database_name'
GROUP BY table_schema;

表操作示例

选择数据库后的表操作

-- 选择数据库
USE company_db;

-- 查看所有表
SHOW TABLES;

-- 查看表状态
SHOW TABLE STATUS;

-- 查看特定表的结构
DESCRIBE employees;
SHOW COLUMNS FROM employees;

-- 查看表的创建语句
SHOW CREATE TABLE employees;

-- 查询表数据
SELECT * FROM employees LIMIT 10;

跨数据库操作

-- 不切换数据库,直接指定数据库名
SELECT * FROM database1.table1;
SELECT * FROM database2.table2;

-- 跨数据库连接查询
SELECT 
    a.name,
    b.department
FROM database1.employees a
JOIN database2.departments b ON a.dept_id = b.id;

-- 跨数据库数据复制
INSERT INTO database2.backup_table 
SELECT * FROM database1.original_table;

权限和访问控制

数据库访问权限

-- 查看当前用户对数据库的权限
SHOW GRANTS;

-- 查看特定用户的权限
SHOW GRANTS FOR 'username'@'localhost';

-- 授予数据库访问权限
GRANT SELECT ON database_name.* TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

-- 撤销权限
REVOKE SELECT ON database_name.* FROM 'username'@'localhost';

🔐 权限级别说明全局权限:对所有数据库的权限数据库权限:对特定数据库的权限表权限:对特定表的权限列权限:对特定列的权限

常见错误和解决方案

错误 1:数据库不存在

-- 错误信息
ERROR 1049 (42000): Unknown database 'database_name'

-- 解决方案:检查数据库是否存在
SHOW DATABASES;
SHOW DATABASES LIKE 'database_name';

-- 如果不存在,创建数据库
CREATE DATABASE database_name;

错误 2:权限不足

-- 错误信息
ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'database_name'

-- 解决方案:检查并授予权限
SHOW GRANTS FOR 'username'@'localhost';

-- 由管理员授予权限
GRANT USAGE ON database_name.* TO 'username'@'localhost';

错误 3:没有选择数据库

-- 错误信息
ERROR 1046 (3D000): No database selected

-- 解决方案:选择数据库
USE database_name;

-- 或者在查询中指定数据库
SELECT * FROM database_name.table_name;

编程语言中的数据库选择

PHP 示例

exec('USE company_db');

// 查询当前数据库
$stmt = $pdo->query('SELECT DATABASE()');
$current_db = $stmt->fetchColumn();
echo "Current database: " . $current_db;
?>

Python 示例

import mysql.connector

# 连接时指定数据库
conn = mysql.connector.connect(
    host='localhost',
    user='username',
    password='password',
    database='company_db'
)

# 或者连接后切换数据库
conn = mysql.connector.connect(
    host='localhost',
    user='username',
    password='password'
)
cursor = conn.cursor()
cursor.execute('USE company_db')

# 查询当前数据库
cursor.execute('SELECT DATABASE()')
current_db = cursor.fetchone()[0]
print(f"Current database: {current_db}")

最佳实践

📋 数据库选择最佳实践明确指定:总是明确指定要操作的数据库权限最小化:只授予必要的数据库访问权限连接时指定:在连接时就指定数据库,避免后续切换错误处理:处理数据库不存在或权限不足的情况会话管理:在长连接中定期确认当前数据库跨库操作:谨慎进行跨数据库操作,注意性能影响命名规范:使用清晰的数据库命名规范

实用技巧

快速切换数据库

-- 在 MySQL 命令行中快速切换
\u database_name

-- 等同于
USE database_name;

-- 查看当前状态
\s
-- 或者
STATUS;

批量操作多个数据库

-- 创建存储过程来操作多个数据库
DELIMITER //
CREATE PROCEDURE ProcessMultipleDatabases()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE db_name VARCHAR(255);
    DECLARE cur CURSOR FOR 
        SELECT schema_name FROM information_schema.schemata 
        WHERE schema_name LIKE 'project_%';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO db_name;
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        -- 切换到数据库并执行操作
        SET @sql = CONCAT('USE ', db_name);
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        
        -- 在这里添加具体的操作
        -- 例如:SELECT COUNT(*) FROM some_table;
        
    END LOOP;
    CLOSE cur;
END//
DELIMITER ;
🎯 MySQL 选择数据库
https://clxhxhhr.top/posts/2815/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。