MySQL 数据库基础:概念、架构、SQL 分类与存储引擎

MySQL 数据库基础:概念、架构、SQL 分类与存储引擎
Lichermione数据库不是简单的“保存数据的文件”,而是一套负责数据组织、并发访问、权限控制、故障恢复和持久化的系统。本文从数据库基本概念出发,梳理 MySQL 的客户端/服务器模型、逻辑层级、SQL 分类和存储引擎,为后续学习表、索引和事务建立全局视角。
1. 为什么需要数据库
直接用普通文件保存数据会遇到许多问题:
- 数据格式由每个程序自行定义,难以共享;
- 查询、排序和关联需要重复编写代码;
- 多个进程同时读写容易产生不一致;
- 缺少统一的权限、事务、备份和恢复机制;
- 数据规模增大后,检索效率和维护成本迅速恶化。
数据库管理系统(DBMS)在应用与持久化数据之间提供统一接口。关系型数据库以表组织数据,并通过 SQL 完成定义、查询、修改和控制。
2. 数据库、DBMS 与数据库服务器
三个概念经常被混用:
| 概念 | 含义 |
|---|---|
| 数据库(Database) | 按一定结构组织的数据集合 |
| DBMS | 管理数据库的软件系统,如 MySQL、PostgreSQL |
| 数据库服务器 | 正在运行的 DBMS 进程及其管理的数据、日志和缓存 |
MySQL 是典型的客户端/服务器系统。客户端发送 SQL,请求经连接管理、解析、优化和执行后,由存储引擎访问数据,再把结果返回客户端。
3. MySQL 的逻辑层级
从大到小可以理解为:
1 | MySQL 实例 |
- 数据库用于划分业务命名空间;
- 表描述一类实体或关系;
- 列定义属性、类型和约束;
- 行是一条具体记录。
关系模型不保证查询结果天然有顺序。即使某次 SELECT * 看起来按主键排列,没有 ORDER BY 也不能依赖该顺序。
4. 连接与基本命令
命令行连接示例:
1 | mysql -h 127.0.0.1 -P 3306 -u app_user -p |
-p 后不要直接写密码,否则可能出现在命令历史和进程列表中。进入客户端后可检查连接:
1 | SELECT VERSION(); |
USER() 反映客户端提供的身份,CURRENT_USER() 反映服务器用于权限校验的账户,二者在代理或匿名账户等情况下可能不同。
5. 一次 SQL 的处理路径
可以把 MySQL Server 粗略分成:
- 连接层:认证、连接管理、会话状态;
- Server 层:解析 SQL、语义检查、查询优化、执行;
- 存储引擎层:索引访问、记录读写、锁与事务实现;
- 持久化层:表空间、日志、数据页等文件。
查询优化器根据统计信息选择访问路径。SQL 写法只是表达“要什么”,最终“怎么取”由执行计划决定,可用 EXPLAIN 观察。
6. SQL 的主要分类
| 分类 | 作用 | 常见语句 |
|---|---|---|
| DDL | 定义数据库对象 | CREATE、ALTER、DROP、TRUNCATE |
| DML | 修改表中数据 | INSERT、UPDATE、DELETE |
| DQL | 查询数据 | SELECT |
| DCL | 权限控制 | GRANT、REVOKE |
| TCL | 事务控制 | START TRANSACTION、COMMIT、ROLLBACK |
分类有助于理解,但不同资料的归类可能略有差异。更重要的是知道语句是否会修改数据、是否导致隐式提交,以及需要什么权限。
7. 字符集与排序规则
字符集决定字符如何编码,排序规则(Collation)决定字符串如何比较和排序。例如:
1 | CREATE DATABASE blog |
现代 MySQL 应优先使用 utf8mb4,它能表示完整 Unicode;MySQL 中历史名称 utf8/utf8mb3 最多使用 3 字节,不能覆盖部分字符。ai_ci 表示通常忽略重音、忽略大小写,是否适合业务要根据唯一性和排序需求决定。
8. 存储引擎
MySQL 的 Server 层通过统一接口调用存储引擎。查看支持情况:
1 | SHOW ENGINES; |
8.1 InnoDB
InnoDB 是通用业务系统的首选,提供:
- ACID 事务;
- 行级锁与 MVCC;
- 外键约束;
- 崩溃恢复;
- 聚簇索引。
8.2 MyISAM
MyISAM 不支持事务和外键,锁粒度也更粗。旧资料常用它对比索引组织方式,但新业务通常不应把它作为默认选择。
选择引擎不是只看读写速度,还要考虑事务、恢复、锁、复制、运维工具和版本支持。
9. 最小实践案例
1 | CREATE DATABASE IF NOT EXISTS school |
业务字段使用 ENUM 是否合适要看演进频率。状态集合经常变化时,字典表或普通字符串可能更易维护。
10. 服务器管理边界
学习环境可以直接管理本机服务,但生产环境应避免随意停止或重启:
1 | systemctl status mysqld |
具体服务名取决于发行版与安装方式。生产管理还应关注配置文件、日志、磁盘空间、连接数、慢查询、备份验证和监控告警。
11. 常见误区
- 把数据库等同于某个目录或单个文件;
- 认为表中记录有天然顺序;
- 使用
root账户连接业务程序; - 仍把
utf8当作完整 UTF-8; - 认为更换存储引擎只影响文件格式;
- 只会执行 SQL,却不检查执行计划、事务边界和错误返回;
- 有备份文件但从未做恢复演练。
理解 MySQL 的关键是分层:SQL 表达需求,Server 层规划执行,存储引擎负责记录与事务,底层文件和日志保证持久化。后续每个知识点都能放回这条路径中理解。