MySQL中update语句的执行流程

前面介绍了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 的准备状态改成提交状态,这时候更新完成。

如图所示:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值