数据表维护两个隐藏字段:事务id、回滚指针
RR重复读MVCC机制演示
注意:bejin等开启事务命令并不是一个事务的起点,在执行到他们之后的一个修改操作,事务菜真正的启动。才会想mysql申请事务id,mysql内部是严格按照事务的启动顺序来分配事务id的
在可重复读隔离级别,当事务开启时,查询任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化【如果是读已提交隔离级别在每次执行查询sql时都会重新生成】
这个视图:由执行查询时所有未提交的事务id数组(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成,事务里的任何sql查询结果需要从对应版本链里的最新数据逐条跟read-view做对比从而得到最终快照结果。
关键词
MVCC可见性算法演示
可重复读
undo回滚日志
记录版本链
一致性视图read-view
未提交事务最小id
已提交最大id
事务id
回滚指针