MySQL数据库操作 #
一、数据库概述 #
1.1 什么是数据库 #
数据库(Database)是存储数据的容器,一个MySQL服务器可以包含多个数据库。
text
MySQL服务器
├── mysql(系统数据库)
├── information_schema(元数据)
├── performance_schema(性能监控)
├── sys(系统视图)
└── mydb(用户数据库)
├── 表(Tables)
├── 视图(Views)
├── 存储过程(Procedures)
└── 函数(Functions)
1.2 系统数据库 #
| 数据库 | 说明 |
|---|---|
| mysql | 存储用户账户和权限信息 |
| information_schema | 数据库元数据信息 |
| performance_schema | 性能监控数据 |
| sys | 系统视图,便于DBA使用 |
二、创建数据库 #
2.1 基本语法 #
sql
CREATE DATABASE database_name;
-- 示例
CREATE DATABASE mydb;
2.2 指定字符集 #
sql
-- 创建时指定字符集
CREATE DATABASE mydb
CHARACTER SET utf8mb4;
-- 指定字符集和排序规则
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
2.3 常用字符集 #
| 字符集 | 说明 | 排序规则 |
|---|---|---|
| utf8mb4 | 完整UTF-8(推荐) | utf8mb4_unicode_ci |
| utf8 | 3字节UTF-8 | utf8_general_ci |
| latin1 | 西欧字符 | latin1_swedish_ci |
| gbk | 中文GBK | gbk_chinese_ci |
2.4 避免重复创建 #
sql
-- 如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb;
-- 如果存在会警告,不会报错
CREATE DATABASE IF NOT EXISTS mydb;
-- Query OK, 1 row affected, 1 warning (0.00 sec)
三、查看数据库 #
3.1 查看所有数据库 #
sql
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| mydb |
+--------------------+
3.2 模糊查询数据库 #
sql
-- 查看以my开头的数据库
SHOW DATABASES LIKE 'my%';
+----------------+
| Database (my%) |
+----------------+
| mysql |
| mydb |
+----------------+
-- 查看包含test的数据库
SHOW DATABASES LIKE '%test%';
3.3 查看数据库创建语句 #
sql
SHOW CREATE DATABASE mydb;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 */|
+----------+----------------------------------------------------------------+
3.4 查看当前数据库 #
sql
-- 查看当前选择的数据库
SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| mydb |
+------------+
-- 如果未选择数据库
SELECT DATABASE();
-- 结果:NULL
四、选择数据库 #
4.1 USE语句 #
sql
-- 选择数据库
USE mydb;
-- Database changed
-- 后续操作都在该数据库中进行
4.2 命令行指定数据库 #
bash
# 登录时指定数据库
mysql -u root -p mydb
# 登录后切换
mysql> USE mydb;
五、修改数据库 #
5.1 修改字符集 #
sql
-- 修改数据库字符集
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
5.2 查看修改结果 #
sql
SHOW CREATE DATABASE mydb;
-- 字符集已更新
六、删除数据库 #
6.1 基本语法 #
sql
-- 删除数据库
DROP DATABASE mydb;
-- 删除后,数据库中的所有数据都会丢失!
6.2 安全删除 #
sql
-- 如果存在则删除
DROP DATABASE IF EXISTS mydb;
-- 如果不存在会警告,不会报错
DROP DATABASE IF EXISTS mydb;
-- Query OK, 0 rows affected, 1 warning (0.00 sec)
6.3 删除注意事项 #
sql
-- 删除前确认
-- 1. 确保选择了正确的数据库
SELECT DATABASE();
-- 2. 查看数据库中的表
SHOW TABLES FROM mydb;
-- 3. 备份重要数据(如果需要)
-- mysqldump -u root -p mydb > mydb_backup.sql
七、数据库信息查看 #
7.1 查看数据库表 #
sql
-- 查看当前数据库的表
USE mydb;
SHOW TABLES;
-- 查看指定数据库的表
SHOW TABLES FROM mydb;
7.2 查看数据库状态 #
sql
-- 查看数据库状态信息
SHOW STATUS;
-- 查看特定状态
SHOW STATUS LIKE 'Threads%';
SHOW STATUS LIKE 'Connections';
7.3 从information_schema查询 #
sql
-- 查询所有数据库信息
SELECT
schema_name AS database_name,
default_character_set_name AS charset,
default_collation_name AS collation
FROM information_schema.schemata;
+--------------------+---------+--------------------+
| database_name | charset | collation |
+--------------------+---------+--------------------+
| information_schema | utf8 | utf8_general_ci |
| mysql | utf8mb4 | utf8mb4_0900_ai_ci |
| mydb | utf8mb4 | utf8mb4_unicode_ci |
+--------------------+---------+--------------------+
-- 查询数据库大小
SELECT
table_schema AS database_name,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
GROUP BY table_schema;
八、数据库备份与恢复 #
8.1 备份数据库 #
bash
# 备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql
# 备份多个数据库
mysqldump -u root -p --databases mydb test > databases_backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql
# 只备份结构(不含数据)
mysqldump -u root -p --no-data mydb > structure.sql
# 只备份数据(不含结构)
mysqldump -u root -p --no-create-info mydb > data.sql
8.2 恢复数据库 #
bash
# 恢复数据库
mysql -u root -p mydb < mydb_backup.sql
# 在MySQL命令行中恢复
mysql> USE mydb;
mysql> SOURCE /path/to/mydb_backup.sql;
8.3 导出特定表 #
bash
# 导出单个表
mysqldump -u root -p mydb users > users_backup.sql
# 导出多个表
mysqldump -u root -p mydb users orders > tables_backup.sql
九、数据库最佳实践 #
9.1 命名规范 #
sql
-- 推荐:小写字母,下划线分隔
CREATE DATABASE ecommerce_db;
CREATE DATABASE blog_system;
CREATE DATABASE user_center;
-- 不推荐
CREATE DATABASE EcommerceDB; -- 大小写混用
CREATE DATABASE ecommerce-db; -- 使用连字符
CREATE DATABASE ecommerce; -- 过于简单
9.2 字符集选择 #
sql
-- 推荐:使用utf8mb4
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 原因:
-- 1. utf8mb4支持完整的UTF-8字符(包括emoji)
-- 2. utf8只支持3字节字符,可能丢失数据
9.3 安全操作 #
sql
-- 删除前检查
-- 1. 确认数据库名称
SHOW DATABASES LIKE 'mydb';
-- 2. 查看数据库内容
SHOW TABLES FROM mydb;
-- 3. 确认是否需要备份
-- 4. 执行删除
DROP DATABASE IF EXISTS mydb;
十、常见问题 #
10.1 数据库已存在 #
sql
-- 错误信息
CREATE DATABASE mydb;
-- ERROR 1007 (HY000): Can't create database 'mydb'; database exists
-- 解决方案
CREATE DATABASE IF NOT EXISTS mydb;
10.2 数据库不存在 #
sql
-- 错误信息
USE mydb;
-- ERROR 1049 (42000): Unknown database 'mydb'
-- 解决方案
-- 先创建数据库
CREATE DATABASE mydb;
USE mydb;
10.3 权限不足 #
sql
-- 错误信息
CREATE DATABASE mydb;
-- ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'mydb'
-- 解决方案
-- 使用root用户授权
GRANT CREATE ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
十一、总结 #
数据库操作要点:
| 操作 | 语法 |
|---|---|
| 创建 | CREATE DATABASE [IF NOT EXISTS] db_name |
| 查看 | SHOW DATABASES |
| 选择 | USE db_name |
| 修改 | ALTER DATABASE db_name |
| 删除 | DROP DATABASE [IF EXISTS] db_name |
最佳实践:
- 使用
IF NOT EXISTS/IF EXISTS避免错误 - 创建时指定字符集为
utf8mb4 - 删除前确认并备份重要数据
- 使用有意义的命名
下一步,让我们学习表操作!
最后更新:2026-03-26