MySQL中update语句的执行流程

前面介绍了MySQL的底层机制与它的日志模块sql

MySQL的底层机制.net

MySQL的日志模块3d

而update语句的执行就得须要去用到MySQL的日志模块。日志

update user set user_name="XXX" where Id=1

当你执行这条命令的时候,执行器首先会让InnoDB去查找到这一行,看这一行的数据页有没有在内存中,若是有就直接返回,若是没有就在磁盘中找,再读入到内存中,最后在返回。code

执行器拿到了引擎给的数据以后,就会把这个user_name这个属性修改成“XXX”,获得一行新的数据,而后再调用引擎接口写入这行新的数据。blog

引擎把这行新的数据更新到内存的同时也会将这个更新操做记录在redo log里,这时候redo log会处于一个准备状态,而后告知执行器已经执行完成,能够随时提交事务。接口

执行器再生成这个操做的bin log,把这个bin log写入到磁盘中。事务

最后执行器再调用引擎的提交事务接口,而后把redo log 的准备状态改为提交状态,这时候更新完成。内存

如图所示:get