案例
update teacher set name = 'sb' where id =1
- 先查询到这条数据,数据有缓存,也会使用缓存(Buffer-Pool),如果没有缓存,先从磁盘加载数据到缓存。
- 把name修改为sb,然后调用引擎的API接口,把数据写入到Buffer-Pool里,同时记录到redolog。这时候redolog进入prepare状态,然后告诉执行器,执行完成,可以随时提交。
- 执行器收到通知后记录binlog,然后调用存储引擎的API接口,设置redolog为commit状态。
- 更新完成。
为什么需要两阶段提交
上面的操作涉及到两个日志文件,类似于分布式事务,不用两阶段提交,就不能保证都成功或者都失败。