MySQL数据库原理学习(五十)
6.4.3 undolog
6.4.3.1 介绍
回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。
当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除。
6.4.3.2 版本链
有一张表原始数据为:
然后,有四个并发事务同时在访问这张表。
A. 第一步
当事务2执行第一条修改语句时,会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。
B.第二步
当事务3执行第一条修改语句时,也会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。
C. 第三步
当事务4执行第一条修改语句时,也会记录undo log日志,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID,回滚指针,回滚指针用来指定如果发生回滚,回滚到哪一个版本。
最终我们发现,不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条
记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。
6.4.4 readview
ReadView(读视图)是 快照读 SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id。
ReadView中包含了四个核心字段:
而在readview中就规定了版本链数据的访问规则:
trx_id 代表当前undolog版本链对应事务ID。
不同的隔离级别,生成ReadView的时机不同:
READ COMMITTED :在事务中每一次执行快照读时生成ReadView。
REPEATABLE READ:仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。
相关文章
- Java架构师大厂面试致命十连问,你接得住吗?
- 面试官:什么是Java优雅埋点API的设计思路?
- 第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经
- 苹果手机解不开怎么办?AnyMP4 iPhone Unlocker for Mac帮你轻松解决
- 【1】VScode 中文界面方法-------超简单教程
- 【4】 VScode最全面最实用的插件推荐,用了你就爱上了!
- 全网最详细超长python学习笔记、14章节知识点很全面十分详细,快速入门,只用看这一篇你就学会了!
- 面向对象五大设计原则
- 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj
- 【一】LaTeX的安装和使用、安装TeXstudio、中文界面输出设置
- 顶象为中国移动打造高效风控系统
- 规模商用不是终点:5.5G要完成两个“三级跳”
- 开放计算再造三原色:绿碳•红利•蓝海
- 英特尔小试「牛」刀,边缘计算引航智慧农场
- 总结一个问题:csdn发布文章页面为空或者创作内容管理为空
- 高考那些事儿,计算机类方向是否值得继续选择,我来给你解答。
- 太强了,全面解析缓存应用经典问题
- 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph L)
- Shell脚本监控网站页面正常打开情况
- Java开发桌面程序学习(一)——JavaFx+Jfoenix初始以及搭建