MySQL的架构
- 连接器:用于验证用户登录
- 查询缓存:执行查询语句时,先会在查询缓存中(8.0移除)
- 分析器:分析SQL用于增删改还是查以及语法是否正确
- 优化器:对SQL语句进行优化
- 执行器:执行SQL,并从SQL引擎返回数据
- 存储引擎:插件式,可选择,默认是InnoDB。
实例
查询
如:
select * from user where name = '张三';
- 先检查该语句是否有权限,如果没有,返回错误;之后查询缓存,是否执行过此查询语句。
- 分析器对语句进行分析,判断语法是否有误
- 优化器对语句进行优化,按照MySQL认为最优的方案确定执行计划
- 验证权限,如果有权限就调用SQL引擎接口,并返回引擎执行结果
更新
更新语句如:
update user set age = 1000 where name = '张三';
- 此语句执行修改前,会先查询,也会用到查询缓存。
- 获取到这条数据,将age改为1000
- InnoDB将这行数据保存在内存中,redo log记录并进入准备状态(准备提交),通知执行器(执行)
- 执行器收到通知后,先记录binlog,提交完成后通知redo log已经完成,redo log记录
- 更新完成
redo log是InnoDB自带的,binlog是MySQL的日志模块。
InnoDB通过redo log实现事务
InnoDB的两阶段提交保证了数据一致性。