mysql实战之间隙锁

q1871901600 发布于 2024-10-18 19 次阅读


什么是间隙锁?

间隙锁,锁的就是两个值之间的空隙,间隙锁是在可重复读隔离级别下才会生效。

比如下列数据库表中:

id为4到8中就有间隙,id为11到40中也有间隙,间隙锁就是在这两个间隙中加锁,其他事务无法插入值。

mysql为什么要设计这个锁呢?

还记得mysql默认的事务隔离级别是什么吗?

答案是 可重复读(Repeatableread),那么这个隔离级别有什么数据安全问题呢?看下面表格

隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
读未提交(Read uncommitted)可能可能可能
读已提交(Read committed)不可能可能可能
可重复读(Repeatableread)不可能不可能可能
可串行化(Serializable)不可能不可能不可能

对!会出现幻读,那么什么是幻读?

幻读(Phantom Reads)就是事务A读取到了事务B提交的新增数据

那么有了间隙锁就解决了这个问题!因为当A事务操作的当前操作的间隙加锁了,B事务就无法对这个间隙新增数据了,A事务也就不会读取到B新增的数据了

问题复现

幻读不好复现,按理论上来说间隙锁是可以避免幻读的

一个会写python的Java工程师
最后更新于 2024-10-18