Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。
MVCC(Muti-Version Concurrency Controller)多版本并发控制机制
undo日志版本链与read view机制详解:undo日志表示的是回滚日志
通过事务id和回滚指针来判断比对的。
在可重复读隔离级别,当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束 之前都不会变化(如果是读已提交隔离级别在每次执行查询sql时都会重新生成),这个视图由执行查询时所有未提交事务id数组(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成,事务里的任何sql查询结果需要从对应 版本链里的最新数据开始逐条跟read-view做比对从而得到最终的快照结果。
如果是开启的是读已提交机制,则在每次查询的时候都会查询获取一组最新事务id,然后再进行比对.
版本链比对规则:
1. 如果 row 的 trx_id 落在绿色部分( trx_id<min_id ),表示这个版本是已提交的事务生成的,这个数据是可见的;
2. 如果 row 的 trx_id 落在红色部分( trx_id>max_id ),表示这个版本是由将来启动的事务生成的,是不可见的(若row 的 trx_id 就是当前自己的事务是可见的;