https://juejin.cn/post/7012539015949713421

上一篇文章重点介绍了MYSQL逻辑架构,包括连接器、查询缓存、分析器、优化器、执行器、存储引擎。介绍了一条查询语句在MYSQL中如何执行的,今天重点介绍一条更新语句在MYSQL中执行顺序,以及涉及到的日志系统中两个重要日志模块redolog、binlog。

首先回顾一下上篇文章,逻辑架构图:

image.png

更新语句也是需要执行上图的流程,

update USER set name = 'zhangsan' where id = 2;

我们以一条更新语句为例:

  1. 客户端建立连接后,首先到分析器进行语法解析,判断这是一条更新语句,然后把查询缓存中把所有与USER表相关缓存全部清空
  2. 优化器根据条件判断是否走索引树,执行器从内存或磁盘中找到对应数据后返回
  3. 把执行器返回的数据进行更新操作,再调用存储引擎写入内存中
  4. 存储引擎写入内存同时,写入redolog日志文件中并且此时redolog状态修改为prepare,通知执行器完成事务
  5. 执行器生成操作binlog日志,并写入磁盘中
  6. binlog写入成功后,执行器调用存储引擎把redolog状态修改为commit,完成事务

update语句内部执行流程图: