说一说 UPDATE xxxxx SET name = 'xxx' WHERE id = 1 执行流程(重点)

52 阅读1分钟
  1. 连接器负责连接、解析器解析语法树、优化器找出索引等

  2. 执行器调用引擎接口,通过主键索引搜索记录。如果id=1的记录在buffer pool(数据页缓存),直接返回,如果不在,从硬盘load出来buffer pool,并且返回

  3. 执行得到记录,将更新前后的记录发给引擎,让引擎去真正执行update

  4. 开启事务,先生成一条 undo log,undo log 会写入 Buffer Pool 中的 Undo 页面

  5. 接着开始更新记录,先更新内存,再写到redo log,这时候更新算完成,这个技术叫做WAL。

  6. 更新完成后,开始记录对应的binlog,此时binlog会被写到binlog cache

  7. 事务提交,过程如下:

    • prepare 将 redo log 对应的事务状态设置为 prepare,刷盘redo log
    • commit 刷盘binlog 接着调用引擎的提交事务接口,将 redo log 状态设置为 commit