InnoDB存储引擎的锁的三种算法

一、引子

与SQL标准不同的地方在于InnoDB存储引擎在REPEATABLE-READ(可重复读)事务隔离级别下使用的是Next-Key Lock锁算法,因此可以避免幻读的产生,

这与其他数据库系统比如SQL Server是不同的。

所以说InnoDB存储引擎的默认支持的隔离级别,已经可以完全保证事务的隔离性要求,即达到了SQL标准的SERIALIZABLE(可串形化)的隔离级别。

那么MySQL是如何在PR级别下防止幻读的发生的呢?

1.在快照读的情况下,MySQL通过MVCC来避免幻读

        快照读,读取的是记录的可见版本,主要应用于无需加锁的select操作

2.在当前读的情况下,MySQL通过next-key lock来避免幻读

      当前读,读取的是记录的最新版本,主要应用于加行共享锁、行排他锁的操作,会对当前记录加锁。

 

二、间隙锁

间隙锁的出现是为了在InnoDB可重复读的隔离级别下,解决幻读问题产生的。

间隙锁会封锁该条记录相邻两个键之间的空白区域,防止其他事务在这个区域内插入,修改,删除数据。

所谓间隙,是将数据氛围不同区间,对区间范围进行加锁,规则为左开右闭。

待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值