MariaDB数据库操作 #
一、数据库概述 #
1.1 数据库概念 #
text
MariaDB架构
├── 服务器(Server)
│ └── MariaDB服务进程
├── 数据库(Database)
│ ├── 系统数据库
│ │ ├── mysql(用户权限)
│ │ ├── information_schema(元数据)
│ │ ├── performance_schema(性能监控)
│ │ └── sys(系统视图)
│ └── 用户数据库
│ ├── mydb1
│ ├── mydb2
│ └── ...
└── 表(Table)
├── users
├── orders
└── ...
1.2 系统数据库 #
| 数据库 | 说明 |
|---|---|
| mysql | 存储用户账户和权限信息 |
| information_schema | 数据库元数据信息 |
| performance_schema | 性能监控数据 |
| sys | 系统诊断视图 |
二、创建数据库 #
2.1 基本语法 #
sql
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
2.2 创建示例 #
sql
-- 创建数据库
CREATE DATABASE mydb;
-- 如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb;
-- 指定字符集
CREATE DATABASE mydb
CHARACTER SET utf8mb4;
-- 指定字符集和排序规则
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 完整示例
CREATE DATABASE IF NOT EXISTS mydb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
2.3 字符集选择 #
sql
-- 常用字符集
-- utf8mb4:完整的UTF-8编码(推荐)
-- utf8:MySQL的utf8是utf8mb3,不完整
-- latin1:西欧字符集
-- gbk:中文GBK编码
-- 查看支持的字符集
SHOW CHARACTER SET;
-- 查看支持的排序规则
SHOW COLLATION;
-- 查看特定字符集的排序规则
SHOW COLLATION WHERE Charset = 'utf8mb4';
2.4 排序规则选择 #
sql
-- 常用排序规则
-- utf8mb4_general_ci:通用排序,不区分大小写(较快)
-- utf8mb4_unicode_ci:Unicode排序,更准确(推荐)
-- utf8mb4_bin:二进制排序,区分大小写
-- utf8mb4_0900_ai_ci:MySQL 8.0新排序规则
-- 排序规则对比
CREATE TABLE collation_test (
name VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
INSERT INTO collation_test VALUES ('a'), ('A'), ('ä');
-- utf8mb4_general_ci: a = A (ä可能不同)
-- utf8mb4_unicode_ci: a = A = ä
-- utf8mb4_bin: a ≠ A ≠ ä
三、查看数据库 #
3.1 查看所有数据库 #
sql
-- 查看所有数据库
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
-- 模糊匹配
SHOW DATABASES LIKE 'my%';
-- 条件查询
SELECT schema_name FROM information_schema.schemata;
3.2 查看数据库创建语句 #
sql
SHOW CREATE DATABASE mydb;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 */|
+----------+----------------------------------------------------------------+
3.3 查看数据库信息 #
sql
-- 从information_schema查询
SELECT
schema_name,
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'mydb';
-- 查看数据库大小
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;
四、选择数据库 #
4.1 USE语句 #
sql
-- 选择数据库
USE mydb;
-- 查看当前数据库
SELECT DATABASE();
-- 创建并选择
CREATE DATABASE mydb;
USE mydb;
4.2 命令行指定 #
bash
# 连接时指定数据库
mariadb -u root -p mydb
# 执行SQL文件
mariadb -u root -p mydb < script.sql
五、修改数据库 #
5.1 修改字符集 #
sql
-- 修改字符集
ALTER DATABASE mydb
CHARACTER SET utf8mb4;
-- 修改字符集和排序规则
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
5.2 查看修改效果 #
sql
-- 查看修改后的设置
SHOW CREATE DATABASE mydb;
-- 注意:修改数据库字符集不会影响已存在的表
-- 已存在的表需要单独修改
六、删除数据库 #
6.1 删除语法 #
sql
-- 删除数据库
DROP DATABASE mydb;
-- 如果存在则删除
DROP DATABASE IF EXISTS mydb;
6.2 删除注意事项 #
sql
-- 删除前确认
SHOW DATABASES;
SELECT DATABASE();
-- 删除会删除所有数据,谨慎操作
-- 建议先备份
-- mysqldump -u root -p mydb > mydb_backup.sql
-- 删除后无法恢复(除非有备份)
DROP DATABASE IF EXISTS mydb;
七、数据库命名规范 #
7.1 命名规则 #
sql
-- 合法的数据库命名
CREATE DATABASE mydb; -- 小写字母
CREATE DATABASE my_db; -- 下划线分隔
CREATE DATABASE mydb2; -- 包含数字
CREATE DATABASE `my-db`; -- 特殊字符(反引号)
-- 不推荐
CREATE DATABASE MyDB; -- 大小写混用
CREATE DATABASE myDb; -- 驼峰命名
CREATE DATABASE `my db`; -- 包含空格
7.2 命名建议 #
| 规则 | 建议 |
|---|---|
| 大小写 | 统一使用小写 |
| 分隔符 | 使用下划线 |
| 长度 | 不超过64字符 |
| 关键字 | 避免使用保留字 |
| 前缀 | 可使用项目前缀 |
sql
-- 推荐命名示例
CREATE DATABASE shop_system;
CREATE DATABASE blog_platform;
CREATE DATABASE user_center;
CREATE DATABASE order_service;
八、数据库配置选项 #
8.1 数据库选项 #
sql
-- 创建数据库时设置选项
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
ENCRYPTION = 'Y'; -- MariaDB 10.2+
-- 查看数据库选项
SHOW CREATE DATABASE mydb;
8.2 只读模式 #
sql
-- 设置数据库只读(MariaDB 10.4+)
ALTER DATABASE mydb READ ONLY = 1;
-- 取消只读
ALTER DATABASE mydb READ ONLY = 0;
九、数据库备份与恢复 #
9.1 使用mariadb-dump备份 #
bash
# 备份单个数据库
mariadb-dump -u root -p mydb > mydb_backup.sql
# 备份多个数据库
mariadb-dump -u root -p --databases mydb1 mydb2 > multi_db_backup.sql
# 备份所有数据库
mariadb-dump -u root -p --all-databases > all_db_backup.sql
# 只备份结构
mariadb-dump -u root -p --no-data mydb > mydb_structure.sql
# 只备份数据
mariadb-dump -u root -p --no-create-info mydb > mydb_data.sql
9.2 恢复数据库 #
bash
# 恢复数据库
mariadb -u root -p mydb < mydb_backup.sql
# 恢复到新数据库
mariadb -u root -p -e "CREATE DATABASE mydb_new"
mariadb -u root -p mydb_new < mydb_backup.sql
9.3 SQL方式备份 #
sql
-- 使用SELECT INTO OUTFILE
SELECT * FROM users
INTO OUTFILE '/tmp/users.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
-- 使用LOAD DATA INFILE恢复
LOAD DATA INFILE '/tmp/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
十、数据库迁移 #
10.1 从MySQL迁移 #
bash
# 从MySQL导出
mysqldump -u root -p --single-transaction --routines --triggers mydb > mydb.sql
# 导入到MariaDB
mariadb -u root -p mydb < mydb.sql
# 或直接管道
mysqldump -u root -p mydb | mariadb -u root -p mydb
10.2 跨版本迁移 #
bash
# 使用兼容模式导出
mariadb-dump -u root -p --compatible=mysql56 mydb > mydb_compatible.sql
# 升级检查
mariadb-upgrade -u root -p
十一、多数据库管理 #
11.1 批量操作 #
sql
-- 查看所有数据库大小
SELECT
table_schema AS database_name,
COUNT(*) AS table_count,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;
-- 查看特定前缀的数据库
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name LIKE 'shop_%';
11.2 数据库监控 #
sql
-- 查看数据库连接数
SELECT
db,
COUNT(*) AS connections
FROM information_schema.processlist
WHERE db IS NOT NULL
GROUP BY db;
-- 查看数据库活动
SELECT
db,
state,
COUNT(*) AS count
FROM information_schema.processlist
WHERE db IS NOT NULL
GROUP BY db, state;
十二、数据库权限管理 #
12.1 数据库级别权限 #
sql
-- 授予数据库所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'localhost';
-- 授予特定权限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'user'@'localhost';
-- 授予只读权限
GRANT SELECT ON mydb.* TO 'readonly'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
12.2 查看数据库权限 #
sql
-- 查看用户对数据库的权限
SHOW GRANTS FOR 'user'@'localhost';
-- 查看特定数据库权限
SELECT
grantee,
table_schema,
privilege_type
FROM information_schema.schema_privileges
WHERE table_schema = 'mydb';
十三、最佳实践 #
13.1 创建数据库清单 #
sql
-- 创建数据库检查清单
-- 1. 确定数据库名称
-- 2. 选择字符集和排序规则
-- 3. 创建数据库
-- 4. 创建用户并授权
-- 5. 创建表结构
-- 6. 导入初始数据
-- 7. 验证功能
-- 示例脚本
CREATE DATABASE IF NOT EXISTS shop_system
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'shop_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON shop_system.* TO 'shop_user'@'localhost';
FLUSH PRIVILEGES;
USE shop_system;
-- 创建表...
13.2 数据库命名约定 #
text
项目数据库命名规范
├── 开发环境:{project}_dev
├── 测试环境:{project}_test
├── 预发布环境:{project}_staging
└── 生产环境:{project}_prod
示例:
├── shop_dev
├── shop_test
├── shop_staging
└── shop_prod
十四、总结 #
数据库操作要点:
| 操作 | 命令 |
|---|---|
| 创建 | CREATE DATABASE |
| 查看 | SHOW DATABASES |
| 选择 | USE |
| 修改 | ALTER DATABASE |
| 删除 | DROP DATABASE |
| 备份 | mariadb-dump |
| 恢复 | mariadb < file.sql |
最佳实践:
- 创建时指定字符集和排序规则
- 使用有意义的命名
- 定期备份数据库
- 合理设置用户权限
- 监控数据库大小和性能
下一步,让我们学习表操作!
最后更新:2026-03-27