关于RR级别下可以避免幻读
来源:3-17 锁模块之RR如何避免幻读
YogurtJ
2020-03-06
老师您好,我将您事务隔离级别与避免幻读的课程反复看了几遍还是有一些疑问
请问老师可否举一个幻读的具体例子,例子为:
在RC级别下,该幻读情况无法避免
在RR级别下,通过加next-key锁的方式避免了该幻读
我个人暂且认为在RR级别下,可以避免看到幻行,解决了不可重复读的问题,但是我并不觉得,能够解决幻读的问题,
经过我自己的试验,比如说,在RR级别下我A,B都开启了 事务,
A先快照读select * from person; 得到了id 1-5 的数据。
B向表中 添加了 id 为6的数据,然后B提交事务
随后 A 对 id为6的数据进行更新,是可以更新的到的
(出现了幻读问题,仿佛自己出现了幻觉)
我认为这个属于幻读问题,因此不觉得RR级别下,可以避免幻读
因此,希望老师可以举出某个例子,在RC级别下会出现幻读
而在RR级别下这个幻读被避免了
希望祥仔可以解答疑惑,非常感谢!
1回答
-
同学好,
请问老师可否举一个幻读的具体例子,例子为:
在RC级别下,该幻读情况无法避免
在RR级别下,通过加next-key锁的方式避免了该幻读
这个例子,可以用我课程里面这个正好避免了幻读的RR例子来试一下就可以了呀。。
此外,RR确实不能全部避免幻读,课程表述这块,当时我举的例子是正好能够避免幻读的情况,主要想表达的是RR并非完全避免不了幻读,这是55开的情况,后来可能课程标题等原因以及当时没有添加另外一种避免不了幻读的情况的原因出现了误解,后续等我先完成目前新课的更新后,再来申请对这部分知识的修正和更新。
另外一种无法避免RR幻读的例子可以详见这个
http://mysql.taobao.org/monthly/2017/06/07/
实际开发的过程中,一般会在程序执行的地方,对并发方法的同一条记录加上同步锁,所以一般情况下也不会出现幻读的情况,请知悉
1212023-11-28
相似问题