RR级别下的幻读问题
来源:10-6 J.U.C包的梳理
Joker4411416
2019-07-17
翔仔哥,最近在查阅学习笔记的时候,在RR级别下避免幻读这一块有了新的困惑,gap锁是锁的间隙如锁住了id为(6,9],那我在另一个事务中插入了非gap锁范围的id为10的数据是可以插入了,那事务A不就出现了幻读吗?
我的意思就是gap锁,锁住的只是一个小范围,非该范围的数据还是可以插入数据,不就还是会出现幻读吗
我手动实验了一下,发现事务B插入非gap范围之后的数据成功并提交后,在事务A中用快照读select * from tb1查询的数据是没有幻读的,但用当前的就有了
写回答
1回答
-
同学好,首先咱们来理解下幻读,
幻读指的是,事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。
像同学上面说的通过当前读确实会产生幻读,因为看起来"多"出数据了,但是RR级别下,是可以通过快照读来避免幻读的,这个就是咱们讲数据库知识的时候说过的知识,这里正好加深巩固下,加油:)
132019-07-19
相似问题