技术主题
间隙锁在mysql中经常使用到,今天就聊一聊mysql的间隙锁的内容。
间隙锁是为了解决幻读的问题,并且在当前读的场景下解决的。
当前读包含:update,delete,insert,select…lock in share mode,select…for update
技术原理
一基本概念
1、行锁:给某一行进行加锁
2、间隙锁:两个值之间的间隙,为解决幻读问题,innodb引入的新锁,间隙锁(Gap Lock)
3、间隙锁Gap,左右都是开区间,间隙锁+行锁称next-key锁
二幻读
幻读指的是一个事务在前后两次查询同一个范围的时候,后一次的查询看到了之前一次没有看到的行
三次查询的sql一样,但是结果不一样,称为幻读,后一次的查询中查到了前一次查询没有看到的行
幻读只有在当前读才会出现的现象。
三为什么会出现幻读
即使把所有的行都加上锁,一旦有别的会话插入新的记录,无法阻止幻读的产生,