联系上文SQL查询语句的执行

查询语句的那一套流程,更新语句也是同样会走一遍。

更新流程还涉及两个重要的日志模块:

redo log(重做日志)和 binlog(归档日志)

redo log:重做日志

redo log是InnoDB引擎特有的日志

WAL技术,全称是Write-Ahead Logging

它的关键点就是先写日志,再写磁盘。

具体来说,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里,并更新内存,此时更新就算完成了。

同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

write pos是当前记录的位置,一边写一边后移,写到末尾再从头开始。

checkpoint是当前要擦除的位置,擦除记录前要把记录更新到数据文件。

InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

binlog:归档日志

Server层也有自己的日志,称为binlog(归档日志)

两种日志的区别

  • redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
  • redo log是物理日志,记录的是“数据页具体的修改”。binlog是逻辑日志,记录语句的原始逻辑(语句)
  • redo log是循环写的,空间固定会用完。binlog是可以追加写入的

prepare和commit,这就是"两阶段提交"。主要是用来保证一致性

1.prepare阶段,记录修改到redo log

2.真正的提交commit需要binlog成功之后。

3.如果binlog未开始或者不完整,事务会回滚。

最新文章

  1. tp5 中 model 的新增方法
  2. 一篇说尽Excel常见函数用法
  3. TableViewCell,TableView,UITableViewCell
  4. Java-数组练习1
  5. 【转】Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
  6. Json::Value使用心得
  7. MongoDB实战指南(二):索引与查询优化
  8. xcode针对不同IOS版本的代码编译问题
  9. CHENEY-YANG'S BLOG(cheney-yang)
  10. java获取当前时间
  11. string.Format()字符串格式化
  12. HttpURLConnection实现两个服务端的对接
  13. MySQL安装、输入密码闪退、workbench使用
  14. python写的一段分页的代码
  15. python学习之装饰器-
  16. 使用顶级 VSCode 扩展来加快开发 JavaScript
  17. MACE移植要求
  18. SCUCTF2018web部分wp
  19. go 方法
  20. 小甲鱼Python第十三讲课后题--014字符串

热门文章

  1. 【Unity|C#】基础篇(21)——常用类
  2. vue中jquery详情
  3. 微信小程序 获取用户昵称、头像
  4. vlan划分、本征vlan配置、中继
  5. shell变量内字符替换和变量字符修改
  6. cursor 把鼠标指针的形状弄成一只伸出食指的手
  7. nodejs使用promise实现sleep
  8. 码云项目克隆至github
  9. hzq84621巨佬的语录
  10. Qt中的Label和PushButton背景图自动缩放设置