什么是意向锁?它和意向书有什么区别?


prtyaa
prtyaa 2024-01-05 22:10:31 63202 赞同 0 反对 0
分类: 资源 标签: 运维
最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。

鲁迅先生曾经说过“我家门前有两棵树,一棵是枣树,另一棵还是枣树。”,由此可见,这老爷子算是把废话文学给玩明白了。

希望大家也能,听君一席话,如听一席话。

聊正题

聊完闲篇,咱们说回正题:什么是意向锁?为什么需要意向锁?

PS:这里没意向书什么事啊,标题中有,纯粹是为了好玩。它们不能说没什么关系,那是一点关系都没有啊。

定义

意向锁(Intention Locks)是 MySQL InnoDB 引擎中的一种锁机制(表级锁),用于协调事务间的加锁操作,以避免冲突和死锁的发生。

为什么要有意向锁?

例如,事务 A 加锁了 Users 表中的一行数据(行锁),而事务 B 要对整个 Users 表进行加锁(表锁),那么这个时候,如果没有意向锁,那事务 B 就会加锁成功了。而事务 B 如果加锁成功的话,那么它是可以对表中的任意数据行进行操作的,包括事务 A 加锁的那行数据,所以,这个时候就发生了锁冲突。

为了避免这个问题,所以 MySQL 引入了意向锁,在事务 A 添加行锁的时候,先添加意向锁,而事务 B 在添加表锁的时候,先判断一下意向锁,如果有意向锁了,它就不能加表锁了,这样避免了锁冲突,提升了加锁判断的效率。

想想一下,如果没有意向锁的话,那么事务 B 在加表锁的时候,只能一行行的判断有没有行锁,而这种判断的效率是非常低的,尤其数据量比较大时。

意向锁分类

意向锁分为以下两种类型:

意向共享锁(Intention Shared lock,IS):表示在某个资源上设置共享锁。也就是读锁,用于读取数据的操作,允许多个事务同时持有(共享锁),不互斥。

意向排他锁(Intention Exclusive lock,IX):表示在某个资源上设置排他锁。也就是写锁,用于修改和更新数据操作,并且同一时间只能由一个事务持有,不能和其他事务共同持有,具有互斥性和排他性。

小结

意向锁并不能直接由开发者创建和使用,它是存在于 MySQL 中,由 MySQL 自行维护的一种协调事务加锁的机制。它在事务创建行锁和表锁时创建,在事务提交或回滚之后自动释放。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL1
粉丝 1 资源 1949 + 关注 私信
最近热门资源
国产操作系统环境搭建(内含镜像资源链接和提取码)  94
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  90
分享几个在日常办公中可以用到的shell脚本  83
bat脚本生成查看电脑配置\硬件信息  80
以openkylin为例编译安装内核  79
常见系统问题及其解决方法  79
分享解决宏碁电脑关机时自动重启的方法  76
统信uosboot区分未挂载导致更新备份失败  71
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  70
loadrunner常见问题整理  67
最近下载排行榜
国产操作系统环境搭建(内含镜像资源链接和提取码) 0
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
分享几个在日常办公中可以用到的shell脚本 0
bat脚本生成查看电脑配置\硬件信息 0
以openkylin为例编译安装内核 0
常见系统问题及其解决方法 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
loadrunner常见问题整理 0
作者收入月榜
1

prtyaa 收益401.13元

2

zlj141319 收益238.21元

3

哆啦漫漫喵 收益231.75元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!