ToB企服应用市场:ToB评测及商务社交产业平台
标题:
MySQL为什么RR隔离级别添加了间隙锁还是无法解决幻读问题?
[打印本页]
作者:
海哥
时间:
2023-3-13 21:41
标题:
MySQL为什么RR隔离级别添加了间隙锁还是无法解决幻读问题?
MySQL为什么RR隔离级别添加了间隙锁还是无法解决幻读问题?
什么是幻读?
幻读本质上也属于不可重复读的情况,T1 读取某个范围的数据,T2 在这个范围内插入或者删除新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。
我的理解
我的理解是:间隙锁只能保证范围内的键不被
插入
,无法保证范围内的键不被
删除
。如果在事务执行期间另一个事务删除了该范围内的某一行数据,原事务再次查询时就会发现出现了幻读。
比如索引1,3有数据,然后加了间隙锁,那么查询1-3之间的数据的时候,会查询到两条记录。并且因为间隙锁的存在,所以无法添加数据。但是索引1或者3本身所代表的数据可能会被删除,所以再次查询的时候会只查询到1条或者0条记录。
所以添加了间隙锁能够解决部分的幻读问题,而不能解决全部的幻读问题!真正解决幻读问题还是要添加
邻健锁(Next-Key Locks)
,在可重复读(REPEATABLE READ)隔离级别下,使用
MVCC + Next-Key Locks
可以解决
幻读
问题。或者可以考虑使用更高的隔离级别,如
Serializable
隔离级别。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4