问题描述:发现隔离级别设置为repeatable read时,当开启A、B事务后,A事务提交,B事务未结束,查询操作能查到A事务提交的内容。与我期望的不符。期望的是B事务读不到A事务的提交。
情况还原如下
第八步的时候B事务在还未提交的情况下,查到了A事务的插入。这是隔离级别设置为repeatable read时不应该出现的情况。后经过查阅资料之后了解到,在官方文档中写道 :
一致性读是通过 MVCC 为查询提供了一个基于时间的点的快照。这个查询只能看到在自己之前提交的数据,而在查询开始之后提交的数据是不可以看到的。一个特例是,这个查询可以看到于自己开始之后的同一个事务产生的变化。这个特例会产生一些反常的现象
在默认隔离级别REPEATABLE READ下,同一事务的所有一致性读只会读取第一次查询时创建的快照。
也就是说在执行了begin或者start transaction 后并没有立马建立SNAPSHOT(快照)。只有当执行了一次select操作之后,才建立了快照。或者用START TRANSACTION WITH CONSISTENT SNAPSHOT命令开启事务,就可以立马创建快照。
看以下操作:
参考链接:https://blog.csdn.net/ashic/article/details/53735537