首页 > 其他分享 >Next-key加锁规则

Next-key加锁规则

时间:2022-10-31 17:24:16浏览次数:49  
标签:加锁 lock 查询 索引 key Next next

一、行锁加锁规则
在RR隔离级别,行锁的加锁规则:
1、加锁原则:加锁的基本单元是next-key lock(前开后闭区间),且查找过程中访问的对象才会加锁
2、等值查询next-key lock退化情况:
(1)唯一索引上的等值查询,查询到结果时,next-key lock退化成行锁
(2)索引上的等值查询,向右遍历到最后一个不满足等值条件的值时,next-key lock退化成间隙锁。
对于退化情况2:举个例子来看:
CREATE TABLE t(id int(11) NOT NULL, d int(11) DEFAULT NULL, c int(11) DEFAULT NULL, PRIMARY KEY (id), KEY c(c))ENGINE=InnoDB;
INSERT INTO t VALUES(0, 0, 0),(5, 5, 5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);
现在在事务1中执行:
BEGIN;
SELECT id FROM t WHERE c=5 lock in share mode;
此时加锁区间分析:
首先查询方式是索引查询,因此在索引树中搜索的区间(0,5]会加next-key lock((0,5)的间隙锁和id为5的行锁)
其次因为不是唯一索引且没有做limit限制,此时会向右遍历到最后一个不满足c=5的值,即加上next-key lock (5,10] 根据退化规则,此时next-key lock (5,10]退化成(5,10)
另外需要注意的是,只有访问的对象才加锁,由于当前查询是覆盖索引,所以主键索引上是没有任何加锁。此时其他事务执行update t set d=d+1 where id=5;是不会阻塞的。但是如果是for update的情况下,系统会
默认你需要更新主键,因此也会给主键上加上行锁
3、范围查询需要注意两个唯一索引的点:
(1)对于范围查询,唯一索引范围查询可能退化成行锁(范围查询时可能使用等值查询然后再进行范围查询,此时唯一索引的等值查询可能会退化成行锁)。
(2)唯一索引的范围查询会访问到不满足条件的第一个值为止。

标签:加锁,lock,查询,索引,key,Next,next
From: https://www.cnblogs.com/kevin-zsq/p/16845048.html

相关文章

  • springboot之spring-boot-admin显示actuator数据报错: Application run failed org.yam
    1.报错显示:13:43:13.869[restartedMain]DEBUGorg.springframework.boot.diagnostics.FailureAnalyzers-FailureAnalyzerorg.springframework.boot.diagnostics.anal......
  • MySQL的主键(PRIMARY KEY),重要性太高
    一、什么是主键主键(PRIMARYKEY)的又叫做“主键约束”,MySQL主键约束是一个单独的列或者多个列的组合,其值能唯一地标识表中的一行数据。这样的一列或多列称为表的主键,通过它......
  • MySQL的外键约束(FOREIGN KEY),有点小复杂
    一、什么是参照完整性在学习外键之前,我们必须先搞懂一个概念,什么是“参照完整性”。参照的关系中的属性值必须能够在被参照关系找到或者取空值,否则不符合数据库的语义。在实......
  • MySQL的唯一约束(Unique Key),数据库设计必备
    一、数据库表的唯一性约束是什么MySQL唯一约束(UniqueKey)要求被约束的列中的数据唯一,允许为NULL,但只能出现一个NULL值。唯一约束可以确保一列或者几列不出现重复值。二、如......
  • 【XSY4182】下一个(next)(欧拉回路,构造)
    题面下一个(next)题解我们可以这么转化问题:给每一条边定向,使得每一个点的出度至少为\(2\)。证明新问题是原问题的充分条件:定好向后,我们先给每个点随便选一条出边,显然这......
  • 项目中加锁的一些真实应用场景
    使用Java进行web开发的项目中,时常会使用到加锁的场景。加锁的操作主要是为了防止某一个操作出现重复的情况导致数据混乱;或者是为了避免在进行某些复杂业务操作的时候,......
  • 高并发技巧-redis热key问题处理技巧
    热key问题,简单来说就是对某一资源的访问量过高问题,再简单一点来说就是对某个资源访问的qps过高,而解决访问量高的问题通常我们使用分布式缓存,最常见的就是redis,这个资源对应r......
  • 打字速度提升工具KeyKey for Mac
    mac键盘打字软件那个比较好呢?KeyKeyforMac是运行在Mac平台上一款非常实用的打字训练工具,能快速的锻炼肌肉记忆,让手指记住每种语言独有的微动作时。KeyKeyforMac(优秀......
  • KeyCode列表
     keycode8=BackSpaceBackSpacekeycode9=TabTabkeycode12=Clearkeycode13=Enterkeycode16=Shift_Lkeycode17=Control_Lkeycode18=Alt_Lkeycode19......
  • 【环境配置/解决报错】 File "/usr/bin/yum", line 30 except KeyboardInterrupt,
    背景系统:centos7新安装了python3.8,并创建了软链接,使得python指向python3.8在运行yum安装命令时出现如下报错报错内容File"/usr/bin/yum",line30 except......