mysql锁的算法


前言

什么是mysql锁的算法,它有哪些分类,每个分类具体的特性有哪些,经过几天的百度学习,有了初步了解,下面总结一下自己的学习心得,以供他人参考。


一、什么是mysql锁的算法?

1.锁的分类

mysql从锁的机制上划分,可以分为乐观锁和悲观锁,悲观锁从类别上划分,又可以分为共享锁(S锁或读锁)和排它锁(X锁或写锁)。

2.mysql默认的隔离级别

mysql默认的隔离级别是RR,实现RR隔离级别有两种方式,一种是通过MVCC快照实现;另一种是锁的机制,这种锁一定是悲观锁。

3.算法分类

我们在手动开启悲观锁的时候,mysql会根据影响的数据范围,开启不同的锁的算法,由此形成了锁算法的分类,大致分为三类:行锁、间隙锁和临键锁(还有其他的页级锁不在本次讨论范围:例如意向锁、自增锁)。

二、行锁、间隙锁和临键锁

1.行锁(Record Locks)

顾名思义,就是只会锁住某一行的数据,行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。有可能会出现死锁的情况。产生行锁一般是等值查询,且作用于唯一索引或连续的普通索引(普通索引列的值没有间隔)/font>

2.间隙锁(Gap Locks)

间隙锁是封锁索引记录中的间隔,或者第一条索引记录之前的范围,又或者最后一条索引记录之后的范围。

可能产生间隙锁的条件:
1.使用普通索引锁定;
2.使用多列唯一索引;
3.使用唯一索引锁定多行记录。


间隙锁可以通过参数innodb_locks_unsafe_for_binlog开闭

3.临键锁(Next-key Locks)

临键锁是行锁和间隙锁的组合,它的封锁范围,既包含索引记录(行锁),又包含索引区间(间隙锁)。无论是唯一索引或是普通索引都有可能产生临键锁。RR隔离级别,默认是临键锁,临键锁根据不同的作用范围,可以转换为行锁和间隙锁,在RC隔离级别下,它和间隙锁会失效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值