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回答

翔仔

2019-07-17

同学好,首先咱们来理解下幻读,

幻读指的是,事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

像同学上面说的通过当前读确实会产生幻读,因为看起来"多"出数据了,但是RR级别下,是可以通过快照读来避免幻读的,这个就是咱们讲数据库知识的时候说过的知识,这里正好加深巩固下,加油:)

1
3
Joker4411416
回复
翔仔
哦,这下清楚了
2019-07-19
共3条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程