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

最佳实践:

  1. 使用 IF NOT EXISTS / IF EXISTS 避免错误
  2. 创建时指定字符集为 utf8mb4
  3. 删除前确认并备份重要数据
  4. 使用有意义的命名

下一步,让我们学习表操作!

最后更新:2026-03-26