首页 > 其他分享 >锁的分类(五)

锁的分类(五)

时间:2022-10-01 10:38:35浏览次数:51  
标签:事务 student 分类 开启 插入 意向锁 id

  • ​临键锁(Next-Key Locks)​
有时候我们既想 锁住某条记录 ,又想 阻止 其他事务在该记录前边的 间隙插入新记录 ,所以InnoDB就提出了一种称之为 Next-Key Locks 的锁,官方的类型名称为: 
LOCK_ORDINARY ,我们也可以简称为next-key锁 。Next-Key Locks是在存储引擎 innodb 、事务级别在 可重复读 的情况下使用的数据库锁,innodb默认的锁就是Next-Key locks

相当于记录锁+间隙锁
间隙锁是2行记录的开区间中不允许插入数据
临键锁是2行记录的闭区间不允许操作数据
  • 案例
# 开启1个新的连接,开启1个新的事务
begin;
# 获取临键锁
select * from student where id <=8 and id > 3 for update;

# 开启1个新的连接,开启1个新的事务
begin;
# 在区间内去获取1个共享锁,获取失败,因为在第1个连接中已经获取了1个临键锁
select * from student where id = 15 lock in share mode;
# 向区间内插入1条数据,插入失败
insert into student(id, name, class) values(12, "Tom", "aaa");
  • ​插入意向锁(Insert Intention Locks)​​:是1中行级锁,不是意向锁,也不是表级锁
我们说一个事务在 插入 一条记录时需要判断一下插入位置是不是被别的事务加了 gap锁 ( next-key锁也包含 gap锁 ),如果有的话,插入操作需要等待,直到拥有 gap锁 的那个事务提交。
但是InnoDB规定事务在等待的时候也需要在内存中生成一个锁结构,表明有事务想在某个 间隙 中 插入 新记录,但是现在在等待。InnoDB就把这种类型的锁命名为 Insert Intention Locks ,
官方的类型名称为:LOCK_INSERT_INTENTION ,我们称为 插入意向锁 。插入意向锁是一种 Gap锁 ,不是意向锁,在insert操作时产生。
插入意向锁是在插入一条记录行前,由 INSERT 操作产生的一种间隙锁 。
事实上插入意向锁并不会阻止别的事务继续获取该记录上任何类型的锁
  • 案例
# 开启1个新的连接,开启1个事务
begin;
# 为某个不存在的行添加1个共享锁,即间隙锁
select * from student where id= 5 lock in share mode;

# 开启第2个新的连接,开启1个事务
begin;
# 向区间内插入1条数据,处于阻塞状态
insert into student(id, name, class) value(6, "gou", "man");

# 开启第3个新的连接,开启1个事务
begin;
# 向区间内插入1条数据,处于阻塞状态
insert into student(id, name, class) value(7, "gou", "man");

# 第2个连接和第3个连接中,执行插入语句时,mysql会自动生成1个插入意向锁,表示该事务有1个插入的意向
# 当第1个连接中的事务提交后,即释放锁后,这2条插入语句如果还没有超时,则会执行成功
# 这2条插入语句间的关系是兼容的



标签:事务,student,分类,开启,插入,意向锁,id
From: https://blog.51cto.com/chniny/5728130

相关文章

  • 锁的分类(七)
    ​​显式锁​​#通过特定的语句进行加锁,我们一般称之为显示加锁#显式共享锁select...lockinsharemode#显式排他锁select...forupdate​​隐式锁​​隐式锁是在......
  • 锁的分类(八)
    ​​全局锁​​全局锁就是对整个数据库实例加锁。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据......
  • ALV :汇总,分类汇总(小计),排序,过滤
    货铺QQ群号:834508274下面开始干货部分……ALV标准功能汇总,分类汇总,排序,过滤这些功能除了可以直接使用它的标准功能按钮之外,你也可以在程序里设定,让ALV列表第一次显示出来就......
  • 朴素贝叶斯分类器
    朴素贝叶斯分类器朴素贝叶斯算法:它是一种基于贝叶斯定理的监督机器学习算法。它是一种用于各种分类任务的概率机器学习算法。在我们深入探讨这个话题之前,我们首先要了解......
  • SARscape5.6.2形变结果分类工具介绍
    SARscape5.6.2版本干涉叠加模块新增时序分类工具,可对时序InSAR进行高级后处理和分析。该工具通过现象特征和参数分析对位移时间序列进行自动分类。可使用外部气象数据(雨、......
  • 网络编程-IP地址的分类
    网络编程-IP地址的分类网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这个用于区分的标识这就是IP地址;IP地址由4个数字组成,形如“192.168.1.1”。(其实是4个字......
  • 18个面向初学者的经典开源计算机视觉项目-图像分类篇Inception(三)
    在研究这篇文章时,有一点很清楚。2014年是发展真正流行的图像分类预训练模型的标志性一年。尽管上述VGG-16在当年的ILSVRC中排名第二,但排名第一的不是别人,正是谷歌——通过它......
  • 深度学习:文本分类模型中的“蒸”功夫
    作者:Xingzhe.AI来自:行者AI 前言2018年Bert的横空出世给自然语言处理带来了巨大的突破,Bert及其衍生模型在多个文本处理下游任务中达到了SOTA的结果。但是这样的提升是......
  • EXCEL如何实现分类
    目的:根据第二列的不同计划线分类来筛选出第一列的料号第一步:选中两列第二步:点击插入,选择"数据透视表"效果图图一:两列都选择行图二:一列设置为筛选器,一列设置为......
  • SQL通用语法和SQL分类
    SQL通用语法1.SQL语句可以单行或多行书写,以分号结尾2.可使用空格和缩进来增强语句的可读性3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写4.3种注释单......