insert intention lock,中文我们也称之为插入意向锁。它是间隙锁的一种,专门针对 insert 操作,官方意思是说多个事务在同一个索引同一个范围区间插入记录时候,如果插入位置不冲突,不会彼此阻塞。下面本篇文章就来带大家了解一下mysql中的插入意向锁,希望对大家有所帮助!

Insert Intention Lock,中文我们也称之为插入意向锁。
这个可以算是对我们之前所讲的 Gap Lock 的一个补充,关于 Gap Lock,如果还有小伙伴不懂,可以参考:记录锁、间隙锁与 Next-Key Locks。
我们之前已经有 Gap Lock 了,Gap Lock 可以帮我们在一定程度上解决幻读问题,但是,之前的似乎有点问题。
假设我有如下一张表:
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `age` (`age`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
id 是主键自增;age 是一个普通索引,现在表中有如下数据:

假设我想执行如下的插入 SQL:
begin;insert into user(username,age) values('wangwu',95);复制代码注意,这个 SQL 执行了但是事务还没有提交。
按照我们之前学习的关于 Gap Lock 的知识分析一下,此时间隙锁的范围是 (89,99),意思是这个范围的 age 都不可以插入。
如果是这样的话,小伙伴们会发现数据插入的效率可就太低了,很容易发生锁冲突,那么怎么办?
我们今天要介绍的插入意向锁就是用来解决这个问题的。
我们来看看 MySQL 官网的介绍:
An insert intention lock is a type of gap lock set by INSERT operations prior to row insertion. This lock signals the intent to insert in such a way that multiple transactions inserting into the same index gap need not wait for each other if they are not inserting at the same position within the gap. Suppose that there are index records with values of 4 and 7. Separate transactions that attempt to insert values of 5 and 6, respectively, each lock the gap between 4 and 7 with insert intention locks prior to obtaining the exclusive lock on the inserted row, but do not block each other because the rows are nonconflicting.
大致翻译下一下就是这样:
插入意向锁是一种在 INSERT 操作之前设置的一种间隙锁,插入意向锁表示了一种插入意图,即当多个不同的事务,同时往同一个索引的同一个间隙中插入数据的时候,它们互相之间无需等待,即不会阻塞(要是单纯按照之前间隙锁的理论,必须要等一个间隙锁释放了,下一个事务才可以往相同的间隙处插入数据)。假设有值为 4 和 7 的索引记录,现在有两个事务,分别尝试插入值为 5 和 6 的记录,在获得插入行的排他锁之前,每个事务使用插入意向锁锁定 4 和 7 之间的间隙,但是这两个事务不会相互阻塞,因为行是不冲突的。
这就是插入意向锁。
小伙伴们注意,松哥之前和大家聊 Gap Lock,说过这个是可重复读(REPEATABLE READ)这个隔离级别下特有的产物,那么现在 Insert Intention Lock 是一种特殊的 Gap Lock,当然也是在可重复读这个隔离级别下生效。
接下来我们通过两个个简单的案例来演示一下插入意向锁。
我们的表结构以及数据和第一小节一致。
首先我们在会话 A 中,执行如下代码:
一览妙笔
自媒体、编剧、营销人员写作工具
50
查看详情

现在会话 A 中的事务没有提交。
接下来我们在会话 B 中,也执行一个插入操作:

我们发现会话 B 也可以正常执行,没有发生阻塞。
这说明,两个插入意向锁之间是兼容的,可以共存的。
我们再来看一个不兼容的例子。
首先在会话 A 中执行如下 SQL 查询 age 大于 80 的记录,并添加排他锁:

接下来在会话 B 中,执行如下代码插入一行数据:

小伙伴们看到,这个操作会被阻塞!阻塞的原因在于,插入意向锁和排他锁之间是互斥的。
趁着发生阻塞的这会,在会话 C 中,我们通过在前面文章中所使用的 show engine innodb status\G 指令,来查看下加锁的情况,重点看 TRANSACTION 节点:

在输出的内容中,红色框选中的地方,清楚的表明了插入意向锁的存在。
总结一下:
插入意向锁虽然名字中有意向二字,但实际上是一个特殊的间隙锁。
插入意向锁之间不互斥。
插入意向锁和排他锁之间互斥。
好啦,有问题欢迎留言讨论。
【相关推荐:mysql视频教程】
以上就是一文聊聊MySQL中的插入意向锁(Insert Intention Lock)的详细内容,更多请关注其它相关文章!
# 互斥
# 江山seo推广软件
# 获胜者网站建设
# 网站SEO收录站源码
# 青岛网站推广定制
# 沈丘百度推广网站地址
# 常德管理网站建设优势
# 游戏网站推广是做那个的
# 无极竞价网站推广技巧
# 自助推广网站怎么建立
# 搜一搜seo注意什么
# 值为
# 后端
# 小伙伴们
# 中有
# 多个
# 是一种
# 一文
# 是一个
# 客户端
# 解锁
# MySQL
# Java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
追剧达人如何发弹幕
如何在Golang中处理表单文件上传_Golang 表单文件上传示例
《书耽》更换手机号方法
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
b站如何剪辑视频_b站必剪app使用教程
海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接
sublime text 4如何安装_最新版sublime下载与汉化教程
如何用mysql实现客户反馈管理_mysql客户反馈数据库方法
《下一站江湖2》武器获取方法
mysql怎么导入sql文件_mysql导入sql文件的方法与技巧
《知到》打卡课程方法
vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足
Go语言反射机制下访问嵌入结构体中的被遮蔽方法
mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法
J*aScript实现网页表单实时输入字段比较与验证教程
苹果自助维修计划支持哪些设备机型
发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?
163邮箱登录入口官网 163.com邮箱登录入口
PHP页面重载时变量值不重置的实现方法
Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频
VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略
腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台
抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?
wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式
sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码
画质怪兽120帧安卓和平精英免费版
QQ邮箱PC端登录页面_QQ邮箱网页版登录界面
如何取消数字签名
如何在mysql中使用索引提示_mysql索引提示优化方法
PHP动态导航按钮:根据用户登录状态切换链接与文本
抖音号升级企业号怎么改名字?升级企业号有哪些好处?
解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用
yandex网页版直接登录 yandex官方入口平台访问方法
解决SQLAlchemy模型跨文件关联的Linter兼容性指南
C++ optional用法详解_C++17处理可能为空的返回值
J*aScript大数运算_BigInt使用指南
poki官网最新入口 poki小游戏大全入口
淘口令快速解析技巧
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
小红书网页版怎么进 小红书网页版通用入口
家里的小飞虫总是不断,用什么方法可以彻底根除?
英雄联盟争者留名活动介绍
Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析
快手极速版在线体验区 快手极速版网页体验入口
windows10怎么设置电源按钮_windows10按下电源键功能修改
win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】
Google Cloud Functions 时区处理指南:理解与最佳实践
创客贴登录页面入口 创客贴网页版最新网址链接
猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
2023-01-23
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。