我有个问题,如果隔离级别为RR,事物A开启后会生成一个ReadView,如果在当前事物select,读到的数据是快照里面的。
于此同时有一个事物B,隔离级别也是RR,他把数据改了。
那原先事物A中select读取的还是原先快照的,这时候事务A做了更新操作,那这里又会生成一个当前读?是这样嘛?
如果是,事物A既有快照读,又有当前读,那它用哪一个呢?
我理解RR保证的是本事务不做更新的前提下,每次读都是相同的,也就是不受其它事务干扰的意思。
但如果自己修改了数据,当然要读修改后的。
A,B在RR是,各自有一份副本
B做的所有update,都不会影响到A. 所以A读取到的还是A自己的快照。
如果B更新和A更新的数据不冲突,那么各自提交。 如果冲突,那就其中一个,一般是后一个失败,要回滚(乐观锁)。
但B不能删除数据,否则会出现。。。 幻读。