MySQL 简介与体系架构
本教程共 46 篇 · 第 1 篇 · 更新于 2026-07-30 · 约 11 分钟阅读
1. MySQL 简介与体系架构
本节目标:搞清楚 MySQL 到底是什么、为什么大家都用它,理解数据库、表、行、列这些基本概念,并弄明白客户端/服务端架构与存储引擎的作用,为后面学 SQL 打下底子。
1.1 先搞清楚:什么是数据库
我们每天都在和”数据”打交道。打开手机听歌,播放列表就是一种数据;刷朋友圈,照片和评论也是数据;逛淘宝下单,购物车和订单记录还是数据。
说白了,数据库(Database)就是按照一定结构来组织、存储和管理数据的仓库。
那为什么不直接把数据存到文件里呢?因为文件读写慢、并发容易乱、查找还不方便。数据库就是专门解决这些问题的工具,它能把数据组织成”表”的结构,让你用很短的语句查到想要的内容。
关系型数据库
我们这本教程学的是关系型数据库(Relational Database)。所谓”关系型”,可以理解成”表格”——数据被存成一张张二维表,表和表之间还能互相”关联”。
比如你有一个用户表、一个订单表,订单里记录”这是哪个用户的订单”,通过用户编号就能把两张表连起来查。这就是”关系”。
关系型数据库管理系统的英文缩写是 RDBMS(Relational Database Management System)。它的特点是:
- 数据以表格形式存在;
- 每一行是一条记录;
- 每一列是同一种类型的数据;
- 多张表组成一个数据库;
- 表与表之间可以建立关联。
1.2 那 MySQL 又是什么
MySQL 是一个开源的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,现在归 Oracle 公司所有。它免费、轻量、速度快,是当今最流行的数据库之一。
它的名字来源挺有意思:创始人 Monty Widenius 用自己女儿的名字 “My” 加上 “SQL” 组成了 MySQL。官方读法是 “My S-Q-L”,不过你爱怎么念都行。
MySQL 能成为 Web 开发的”标配”,主要靠这几个特点:
- 开源免费:社区版不花钱,也能付费买商业版要技术支持;
- 跨平台:Windows、Linux、macOS 都能跑;
- 性能好:处理千万级数据没问题,响应也快;
- 支持标准 SQL:学一套语法,换数据库也能用上大半;
- 生态成熟:和 PHP、Java、Python 都能很好配合,是 LAMP(Linux + Apache + MySQL + PHP)架构的核心组件。
NoteMySQL 和 SQL 不是一回事。SQL(Structured Query Language,结构化查询语言) 是一门”语言”,用来操作数据库;而 MySQL 是一个”软件”,是能听懂 SQL 的数据库服务器。两者关系就像”英语”和”英国人”。
1.3 几个必须先记住的术语
后面会反复用到这些词,先认个脸:
- 数据库(Database):关联表的集合,相当于一个大文件夹;
- 表(Table):数据的矩阵,长得像 Excel 表格;
- 列(Column):也叫字段,一列存同一类数据,比如”姓名”;
- 行(Row):也叫记录或元组,一行描述一条完整信息,比如”一个用户”;
- 主键(Primary Key):能唯一标识一行数据的列,比如用户 ID;
- 外键(Foreign Key):用来关联两张表的列;
- 索引(Index):像书的目录,帮数据库快速定位数据,提升查询速度。
这些概念不用一次全背下来,后面用到的时候会反复讲。先有个印象就行。
1.4 客户端/服务端架构
MySQL 采用的是客户端/服务端(Client/Server)架构,这点一定要理解,不然后面连接、操作都会迷糊。
说白了,MySQL 分成两个部分:
- 服务端(MySQL Server):真正存数据、执行 SQL 的”大脑”,通常装在服务器上,一直默默运行着;
- 客户端(MySQL Client):你用来跟服务端”对话”的工具,把你的 SQL 发给服务端,再把结果展示给你。
两者之间通过网络通信。你在一台电脑上敲 SQL,数据可能存在另一台电脑的服务端里。
[ 你 ] --敲SQL--> [ 客户端 ] --网络--> [ 服务端 ] --读写--> [ 数据文件 ]
|
[ 返回结果给客户端 ]
平时最常用的客户端就是 MySQL 自带的命令行工具 mysql,敲 mysql -u root -p 进去那个黑乎乎的窗口就是它。当然也有很多图形化客户端,比如官方的 MySQL Workbench、第三方的 Navicat、DBeaver 等,本质都是干这件事。
Tip一台机器上可以同时装服务端和客户端——你本机开发就是这种情形。但概念上要清楚:客户端发命令,服务端干活的。
1.5 SQL 是怎么被处理的
了解下服务端收到一条 SQL 后大致的处理流程,对后面排错有帮助。简化来说分这几步:
- 连接层:客户端连上来,先校验账号密码,确认身份;
- SQL 接口:接收 SQL 语句,做基本的语法解析;
- 解析器(Parser):把 SQL 拆解成解析树,检查语法对不对;
- 优化器(Optimizer):决定怎么执行最划算,比如走哪个索引;
- 执行器:真正调用存储引擎去读写数据;
- 存储引擎:负责数据的实际存储和提取,这是 MySQL 最有特色的一层。
记住一个关键点:优化器决定”怎么做”,存储引擎负责”动手做”。所以同一条 SQL,不同引擎、不同索引,执行效率可能差很多。
1.6 存储引擎:MySQL 的特色
这是 MySQL 和很多数据库不一样的地方。存储引擎(Storage Engine) 决定了数据怎么存、怎么建索引、支不支持事务。
MySQL 支持多种存储引擎,同一台服务器上不同表还能用不同引擎。最常用的有两个:
InnoDB
从 MySQL 5.5 起成为默认存储引擎,现在我们写的表几乎都用它。它的特点是:
- 支持事务(Transaction),保证一组操作要么全成功、要么全失败;
- 支持行级锁,并发性能好;
- 支持外键,保证数据完整性;
- 崩溃后能自动恢复,数据安全有保障。
Note事务是 InnoDB 的灵魂。比如转账:A 扣钱、B 加钱,必须同时成功或同时失败,不然钱就凭空消失或多出来了。MyISAM 做不到这点。
MyISAM
MySQL 早期的默认引擎,现在基本不用了。它的特点是:
- 不支持事务,也不支持行锁;
- 表级锁,并发一高就互相等;
- 优势是查询计数快、全文索引早(现在 InnoDB 也支持了)。
老项目、只读的统计表偶尔还能见到它。新项目统一用 InnoDB 就行。
两者的简单对比
| 对比项 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 支持 | 不支持 |
| 锁粒度 | 行锁 | 表锁 |
| 外键 | 支持 | 不支持 |
| 崩溃恢复 | 支持 | 不支持 |
| 全文索引 | 8.0+ 支持 | 支持 |
| 适用场景 | 绝大多数业务 | 老系统/只读统计 |
查看当前服务器支持哪些引擎,可以用这条命令:
SHOW ENGINES;
结果里 Support 列标 DEFAULT 的就是默认引擎。在 MySQL 26.7 里,默认就是 InnoDB。
查看某张表用的什么引擎:
SHOW TABLE STATUS LIKE 'users'\G
输出里的 Engine 字段就是答案。
1.7 MySQL 的版本怎么选
MySQL 现在采用”创新版 + LTS 长期支持版”双轨发布:
- 创新版(Innovation):包含最新特性,更新快,适合想尝鲜的;
- LTS 版:稳定、维护周期长,适合生产环境。
截至本教程写作,官方下载页提供的版本有:
- 26.7.0:当前最新创新版,本教程的基线版本;
- 9.7.2 LTS:长期支持版;
- 8.4.11 LTS:长期支持版;
- 8.0.46:经典老版本,已接近生命周期终点。
Warning本教程以 MySQL 26.7 为基线讲解语法和特性。但要注意:从 8.0 起,MySQL 有几项重大变化——默认认证插件改成
caching_sha2_password、默认字符集改成utf8mb4、CHECK约束从 8.0.16 起真正生效、8.0+ 支持窗口函数和 CTE。而 8.4 起老的mysql_native_password认证插件被弃用,9.0 起彻底移除。这些差异后面遇到都会标注。
1.8 小结
这一节我们建立了几个核心认知:
- 数据库是存数据的仓库,关系型数据库用”表”来组织数据;
- MySQL 是一个开源的关系型数据库管理系统,免费、跨平台、性能好;
- MySQL 是客户端/服务端架构,服务端干活,客户端发命令;
- 服务端处理 SQL 经过连接、解析、优化、执行几步;
- 存储引擎决定数据怎么存,默认用 InnoDB,支持事务和行锁。
下一节我们就动手把 MySQL 装起来,开始真正和它打交道。