Undo Log
用于保证事务的原子性, 每一个修改操作(无论事务是否提交), MySQL都会写一条Undo Log日志, 用于回滚
Read View
可以理解为一种可见性算法, 用于判断当前事务对某条记录的某个版本是否可见
Read View中有3个非常重要的属性, 用java代码演示一下
@Datapublic class ReadView {/*** 用于维护Read View生成时刻, 系统正活跃的事务ID列表*/private List<Long> trx_id_list;/*** 是trx_id_list列表中的最小值*/private Long min_trx_id;/*** Read View生成时刻, 系统尚未分配的下一个事务ID, 也就是目前已出现过的事务ID的最大值 + 1*/private Long max_trx_id;}
然后根据min_trx_id和max_trx_id划分出3个区间
Undo Log中的版本可见性规则: 对已提交的事务可见, 对未提交的事务不可见
- trx ∈ (-∞, min_trx_id) 可见
- trx ∈ [max_trx_id, +∞) 不可见
- trx ∈ [min_trx_id, max_trx_id)
- trx ∈ trx_id_list 不可见
- trx ∉ trx_id_list 可见
