mysql一次数据更新的全过程

  1. 更新语句经过解析与优化,生成执行计划,交由执行器调用存储引擎接口。
    1. 执行器会多次调用存储引擎接口,并不是一次完成
  2. 查询旧值,如果这个值不在内存缓冲区则需要查找旧值,从磁盘数据页加载到内存缓冲区
  3. 先将旧值写入undo log日志文件中,用于回滚数据
  4. 更新内存中的数据
  5. 向更新操作写入内存中redo log buffer中
    1. redo log buffer里的日志每隔一秒会自动刷新到磁盘
  6. 将redo log buffer中跟本事务相关的redo log日志刷新到磁盘,并向磁盘redo log文件中写入一个prepare redo log
  7. 准备提交事务,将binlog日志写入磁盘binlog文件中
  8. 把本次更新对应的binlog文件名称和这些更新的binlog日志在磁盘文件的位置都写入到redo log日志文件中,同时在redo log 文件中写入一个commit标志
  9. 事务处理完成
  10. mysql 后台线程会负责将数据刷入到磁盘。

b9bbb1c25be22f2ff530e3a67e30d7ad.png

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值