当前位置: 首页 > 工具软件 > next-update > 使用案例 >

为什么Next-Key Lock可以解决幻读问题

仲孙兴旺
2023-12-01

幻读是指一个事务在前后两次查询同意范围的时候,后一次查询看到了前一次查询没有看到的行。并且在默认的可重复读隔离级别下,普通读查询的是快照读,是不会看到别的事务插入数据的,幻读只会在当前读的情况下才会出现。(select * from table where d=5 for update这种情况,也就是用于更新读才会是当前读。)

Next-Key Lock能够解决幻读问题的关键在于MySQL的数据存储结构是B+树,并且Next-Key Lock只有对于建立索引的列才能够起作用,在没有建立索引的列为了解决幻读使用的是表锁。在对一列建立了索引后,那么就会在这个非聚集索引结构中以B+树的,将当前列的值作为Key对数据进行组织。那么数据也就会按当前列的值有序存储。所以通过Next-Key Lock锁住符合当前条件行的前后区间能够,使用间隙锁组织新数据的插入能够防止出现幻读的情况。

附:

Next-key lock(只在RR的当前读有效)出现的条件

行锁 + gap锁。

1、没有设置索引或者没有命中索引,表锁

2、命中非唯一索引,next-key lock

3、命中唯一索引,x锁

 类似资料: