🗄️ MySQL 创建数据库
数据库是存储相关数据的容器。本章将详细介绍如何在 MySQL 中创建数据库,包括语法、字符集设置、排序规则以及 MySQL 5.7 和 8.x 版本的差异。
📊 MySQL 5.7 vs 8.x 默认设置对比
设置项 |
MySQL 5.7 |
MySQL 8.x |
默认字符集 |
latin1 |
utf8mb4 |
默认排序规则 |
latin1_swedish_ci |
utf8mb4_0900_ai_ci |
Unicode 支持 |
需手动设置 utf8mb4 |
默认完整 Unicode 支持 |
Emoji 支持 |
需设置 utf8mb4 |
默认支持 |
📝 基本语法
CREATE DATABASE 语法
-- 基本语法
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
-- 简单示例
CREATE DATABASE myapp;
-- 完整示例
CREATE DATABASE myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 安全创建(如果不存在才创建)
CREATE DATABASE IF NOT EXISTS myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
语法参数说明
- IF NOT EXISTS:如果数据库已存在,不会报错
- CHARACTER SET:指定数据库的默认字符集
- COLLATE:指定数据库的默认排序规则
🔤 字符集和排序规则
常用字符集
-- 查看所有可用字符集
SHOW CHARACTER SET;
-- 常用字符集
utf8mb4 -- 完整的UTF-8编码,支持4字节字符(推荐)
utf8 -- UTF-8编码,最多3字节(不推荐,不支持emoji)
latin1 -- 西欧字符集
gbk -- 中文字符集
ascii -- ASCII字符集
常用排序规则
-- 查看字符集对应的排序规则
SHOW COLLATION LIKE 'utf8mb4%';
-- UTF8MB4 常用排序规则
utf8mb4_unicode_ci -- Unicode标准排序,支持多语言(推荐)
utf8mb4_general_ci -- 通用排序,性能较好
utf8mb4_bin -- 二进制排序,区分大小写
utf8mb4_0900_ai_ci -- MySQL 8.x 默认,支持最新Unicode标准
-- 排序规则后缀含义
_ci -- Case Insensitive(不区分大小写)
_cs -- Case Sensitive(区分大小写)
_bin -- Binary(二进制排序)
_ai -- Accent Insensitive(不区分重音)
_as -- Accent Sensitive(区分重音)
MySQL 8.x 新增排序规则特性
- utf8mb4_0900_ai_ci:基于 Unicode 9.0 标准
- 更好的多语言支持:改进的排序算法
- 性能优化:更快的字符串比较
-- MySQL 8.x 推荐的数据库创建方式
CREATE DATABASE modern_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
💡 实际应用示例
1. 创建电商系统数据库
-- 电商系统数据库
CREATE DATABASE IF NOT EXISTS ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '电商系统数据库';
-- 验证创建结果
SHOW CREATE DATABASE ecommerce;
2. 创建多语言博客数据库
-- 多语言博客数据库(MySQL 8.x)
CREATE DATABASE IF NOT EXISTS blog_multilang
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci
COMMENT '多语言博客系统';
-- 多语言博客数据库(MySQL 5.7 兼容)
CREATE DATABASE IF NOT EXISTS blog_multilang_57
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '多语言博客系统 - MySQL 5.7 兼容';
3. 创建日志系统数据库
-- 日志系统数据库(性能优先)
CREATE DATABASE IF NOT EXISTS logs
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci
COMMENT '系统日志数据库';
4. 创建区分大小写的数据库
-- 需要区分大小写的数据库
CREATE DATABASE IF NOT EXISTS case_sensitive_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_bin
COMMENT '区分大小写的数据库';
🔍 数据库信息查询
查看数据库列表
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库(带模式匹配)
SHOW DATABASES LIKE 'my%';
-- 使用 INFORMATION_SCHEMA 查询
SELECT SCHEMA_NAME as '数据库名'
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
ORDER BY SCHEMA_NAME;
查看数据库详细信息
-- 查看数据库创建语句
SHOW CREATE DATABASE myapp;
-- 查看数据库字符集和排序规则
SELECT
SCHEMA_NAME as '数据库名',
DEFAULT_CHARACTER_SET_NAME as '字符集',
DEFAULT_COLLATION_NAME as '排序规则'
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'myapp';
-- 查看当前使用的数据库
SELECT DATABASE();
-- 查看数据库大小
SELECT
table_schema as '数据库',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as '大小(MB)'
FROM information_schema.tables
WHERE table_schema = 'myapp'
GROUP BY table_schema;
✅ 最佳实践
1. 命名规范
- 使用小写字母和下划线
- 避免使用 MySQL 保留字
- 使用有意义的名称
- 保持名称简洁但描述性强
-- ✅ 好的命名示例
CREATE DATABASE user_management;
CREATE DATABASE ecommerce_system;
CREATE DATABASE blog_platform;
-- ❌ 不好的命名示例
CREATE DATABASE Database; -- 使用了保留字
CREATE DATABASE db1; -- 名称不够描述性
CREATE DATABASE UserManagement; -- 使用了大写字母
2. 字符集选择建议
-- 推荐:现代应用使用 utf8mb4
CREATE DATABASE modern_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- MySQL 8.x 推荐
CREATE DATABASE modern_app_8x
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 性能敏感应用
CREATE DATABASE performance_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
3. 创建数据库脚本模板
-- 完整的数据库创建脚本模板
-- 检查并删除已存在的数据库(可选)
-- DROP DATABASE IF EXISTS myapp;
-- 创建数据库
CREATE DATABASE IF NOT EXISTS myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '应用程序数据库';
-- 验证创建结果
SHOW CREATE DATABASE myapp;
-- 使用数据库
USE myapp;
-- 显示当前数据库
SELECT DATABASE() as '当前数据库';
⚠️ 注意事项
1. 字符集兼容性
- MySQL 5.7 默认使用 latin1,需要手动设置 utf8mb4
- 从 utf8 升级到 utf8mb4 需要谨慎处理
- 确保应用程序连接时指定正确的字符集
2. 排序规则影响
-- 不同排序规则的比较结果
-- utf8mb4_general_ci: 'A' = 'a' = 'À' = 'á'
-- utf8mb4_bin: 'A' ≠ 'a' ≠ 'À' ≠ 'á'
-- utf8mb4_unicode_ci: 'A' = 'a', 'À' = 'à', 但 'A' ≠ 'À'
-- 测试排序规则差异
SELECT 'A' = 'a' COLLATE utf8mb4_general_ci as general_ci;
SELECT 'A' = 'a' COLLATE utf8mb4_bin as binary;
3. 性能考虑
- utf8mb4_general_ci 比 utf8mb4_unicode_ci 性能更好
- utf8mb4_unicode_ci 排序更准确,支持更多语言
- 根据应用需求选择合适的排序规则
🛠️ 数据库管理操作
切换数据库
-- 使用 USE 语句切换数据库
USE myapp;
-- 验证当前数据库
SELECT DATABASE();
修改数据库属性
-- 修改数据库字符集和排序规则
ALTER DATABASE myapp
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
-- 仅修改字符集
ALTER DATABASE myapp CHARACTER SET utf8mb4;
-- 仅修改排序规则
ALTER DATABASE myapp COLLATE utf8mb4_unicode_ci;
数据库备份和恢复
-- 备份数据库结构(仅结构,不包含数据)
mysqldump -u root -p --no-data myapp > myapp_structure.sql
-- 备份完整数据库
mysqldump -u root -p myapp > myapp_backup.sql
-- 恢复数据库
mysql -u root -p myapp < myapp_backup.sql
-- 创建数据库并恢复
mysql -u root -p -e "CREATE DATABASE myapp_restored CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p myapp_restored < myapp_backup.sql
📋 完整示例:创建项目数据库
-- 项目数据库创建完整脚本
-- ================================
-- 1. 检查 MySQL 版本
SELECT VERSION() as 'MySQL版本';
-- 2. 查看当前字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 3. 创建项目数据库
CREATE DATABASE IF NOT EXISTS project_management
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '项目管理系统数据库';
-- 4. 验证创建结果
SHOW CREATE DATABASE project_management;
-- 5. 使用数据库
USE project_management;
-- 6. 创建用户并授权(可选)
CREATE USER IF NOT EXISTS 'project_user'@'localhost'
IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON project_management.*
TO 'project_user'@'localhost';
FLUSH PRIVILEGES;
-- 7. 验证权限
SHOW GRANTS FOR 'project_user'@'localhost';
-- 8. 显示最终状态
SELECT
DATABASE() as '当前数据库',
USER() as '当前用户',
@@character_set_database as '数据库字符集',
@@collation_database as '数据库排序规则';