这条语句基本上也会沿着上一个查询的流程走,只不过执行更新的时候要记录日志,这就会引入日志模块了,MySQL 自带的日志模块是 binlog(归档日志) ,所有的存储引擎都可以使用,我们常用的 InnoDB 引擎还自带了一个日志模块 redo log(重做日志),我们就以 InnoDB 模式下来探讨这个语句的执行流程。
- 先查询到张三这一条数据,如果有缓存,也是会用到缓存。
- 然后拿到查询的语句把 age 改为 19,然后调用引擎 API 接口写入这一行数据,InnoDB 引擎把数据保存在内存中同时记录 redo log,此时 redo log 进入 prepare 状态,然后告诉执行器执行完成了随时可以提交。
- 执行器收到通知后记录 binlog,然后调用引擎接口,提交 redo log 为提交状态。
- 更新完成。
更新语句执行流程如下:分析器—->权限校验—->执行器—>引擎—redo log(prepare 状态)—> binlog —>redo log(commit状态)
update tb_student A set A.age='18' where A.name=' 张三 ';