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

锁的分类(七)

时间:2022-10-01 10:38:13浏览次数:43  
标签:事务 加锁 记录 分类 隐式 trx id

  • ​显式锁​
# 通过特定的语句进行加锁,我们一般称之为显示加锁
# 显式共享锁
select ... lock in share mode
# 显式排他锁
select ... for update
  • ​隐式锁​
隐式锁是在进行插入操作时,生成的锁;1个事务在进行插入操作时,为了避免其他事务对这条记录进行读或写,导致发生脏读或脏写,会为这个插入操作加上1个隐式锁

插入意向锁也是隐式锁

情景一:对于聚簇索引记录来说,有一个trx_id隐藏列,该隐藏列记录着最后改动该记录的事务id。那么如果在当前事务中新插入一条聚簇索引记录后,该记录的trx_id隐藏列代表的的
就是当前事务的事务id,如果其他事务此时想对该记录添加S锁或者X锁时,首先会看一下该记录的trx_id隐藏列代表的事务是否是当前的活跃事务,如果是的话,那么就帮助当前事务创建
一个X锁(也就是为当前事务创建一个锁结构,is_waiting属性是false),然后自己进入等待状态(也就是为自己也创建一个锁构,is_waiting属性是true)

情景二:对于二级索引记录来说,本身并没有trx_id隐藏列,但是在二级索引页面的Page Header部分有一个PAGE_MAX_TRX_ID属性,该属性代表对该页面做改动的最大的事务id,
如果PAGE_MAX_TRX_ID属性值小于当前最小的活跃事务id,那么说明对该页面做修改的事务都已经提交了,否则就需要在页面中定位到对应的二级索引记录,然后回表找到它对应的
聚簇索引记录,然后再重复情景一的做法

即:一个事务对新插入的记录可以不显式的加锁(生成一个锁结构),但是由于事务id的存在,相当于加了一个隐式锁。别的事务在对这条记录加S锁或者X锁时,由于隐式锁的存在,
会先帮助当前事务生成一个锁结构,然后自己再生成一个锁结构后进入等待状态。隐式锁是一种延迟加锁的机制,从而来减少加锁的数量。

隐式锁在实际内存对象中并不含有这个锁信息。只有当产生锁等待时,隐式锁转化为显式锁
  • 案例
# 开启1个连接,开启1个新的事务
begin;
# 执行插入操作
insert INTO student VALUES(34,"周八","二班");

# 开启第2个连接,开启1个新的事务
begin;
# 执行插叙操作,由于上面执行了1个插入操作,第2个事务会为第1个事务生成1个锁结构,第2个事务处于阻塞状态
select * from student lock in share mode;

# 在第1个连接中查看隐式锁
SELECT * FROM performance_schema.data_lock_waits\G;
  • 隐式锁的逻辑过程如下:
A. InnoDB的每条记录中都一个隐含的trx_id字段,这个字段存在于聚簇索引的B+Tree中。
B. 在操作一条记录前,首先根据记录中的trx_id检查该事务是否是活动的事务(未提交或回滚)。如果是活
动的事务,首先将 隐式锁 转换为 显式锁 (就是为该事务添加一个锁)。
C. 检查是否有锁冲突,如果有冲突,创建锁,并设置为waiting状态。如果没有冲突不加锁,跳到E。
D. 等待加锁成功,被唤醒,或者超时。
E. 写数据,并将自己的trx_id写入trx_id字段。



标签:事务,加锁,记录,分类,隐式,trx,id
From: https://blog.51cto.com/chniny/5728131

相关文章

  • 锁的分类(八)
    ​​全局锁​​全局锁就是对整个数据库实例加锁。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据......
  • 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种注释单......
  • Pytorch实战:8层神经网络实现Cifar-10图像分类验证集准确率94.71%
    实验环境:Pytorch1.7.0torchvision0.8.2Python3.8CUDA10.2+cuDNNv7.6.5Win10+PycharmGTX1660,6G网络结构采用最简洁的类VGG结构,即全部由3*3卷积和最大池......