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

MySQL的底层机制

MySQL的日志模块

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

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

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

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

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

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

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

如图所示: