文章目录
- [1、undo log](#1、undo log)
- [2、undo log 版本链](#2、undo log 版本链)
1、undo log
回滚日志
,在insert、update、delete的时候产生的便于数据回滚的日志。- 当
insert
的时候,产生的undo log日志只在回滚
时需要,在事务提交后,可被立即删除。- 而
update、delete
的时候,产生的undo log日志不仅在回滚
时需要,在快照读
时也需要,不会立即被删除。
2、undo log 版本链
DB_TRX_ID
:代表最近修改事务ID
,记录插入这条记录或最后一次修改该记录的事务ID,是自增
的。DB_ROLL_PTR
:由于这条数据是才插入的,没有被更新
过,所以该字段值为null。
2.1、然后,有四个并发事务同时在访问这张表。
2.1.1、修改id为30记录,age改为3
当事务2
执行第一条修改语句时,会记录undo log日志
,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID
,回滚指针,回滚指针
用来指定如果发生回滚,回滚到哪一个版本。
2.1.2、修改id为30记录,name改为A3
当事务3
执行第一条修改语句时,也会记录undo log日志
,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID
,回滚指针,回滚指针
用来指定如果发生回滚,回滚到哪一个版本。
2.1.3、修改id为30记录,age改为10
当事务4
执行第一条修改语句时,也会记录undo log日志
,记录数据变更之前的样子; 然后更新记录,并且记录本次操作的事务ID
,回滚指针,回滚指针
用来指定如果发生回滚,回滚到哪一个版本。
2.2、总结
最终我们发现,
不同事务
或相同事务
对同一条记录
进行修改,会导致该记录的undolog生成一条记录版本链表
,链表的头
部是最新的旧
记录,链表尾
部是最早的旧
记录。