第一个例子:
在表中插入一条数据. 在开启事务1、2、3、4。事务4更新了数据并commit了。事务2接着select 能查到最新数据吗?
分析:trx_list(当前活跃的事务):1、2、3
Up_limit_id(活跃中最小的事务ID):1
Low_limit_id(下一个要分配的事务ID):5
Creator_trx_id(创建当前读视图的ID):2
DB_TRX_ID(当前最新数据记录中的事务ID):4
比较事务4不在活跃列表中,说明在生成读视图的之前就已提交。事务2 可以查看到最新记录。
第二个例子:
事务2 先select 一次,事务4接着更新数据并提交,事务2 select 第二次读到是最新数据吗?
分析:
RR在第一次select 时 生成唯一的readview
trx_list(当前活跃的事务):1、2、3、4
Up_limit_id(活跃中最小的事务ID):1
Low_limit_id(下一个要分配的事务ID):5
Creator_trx_id(创建当前读视图的ID):2
DB_TRX_ID(当前最新数据记录中的事务ID):4
事务2的第二次select 用的是第一次select读视图 ,比较事务4在活跃列表中,所以事务2即使是第二次select也是看不到最新数据的
RR-可重复读:只有在第一次select 时 生成读视图
RC-读已提交:每次select 时都生成读视图