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

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

最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。

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

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

聊正题

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

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 自行维护的一种协调事务加锁的机制。它在事务创建行锁和表锁时创建,在事务提交或回滚之后自动释放。

责任编辑:武晓燕 来源: Java中文社群
相关推荐

2024-05-15 09:23:45

MySQL排他锁共享锁

2023-07-03 08:15:46

MySQLInnoDB

2022-11-28 14:27:17

插入意向锁age

2022-04-21 10:39:29

InnoDB意向锁SQL

2022-08-26 16:32:08

云计算公有云私有云

2024-04-02 09:17:10

单元测试集成测试

2024-10-30 10:38:08

2022-03-16 07:33:40

守护线程用户线程语言

2010-04-13 14:47:22

英特尔腾讯MeeGo

2023-03-26 21:51:42

2022-05-09 07:37:04

Java非公平锁公平锁

2024-03-08 08:26:20

防抖节流delay​

2024-04-16 17:41:01

人工智能大型语言模型

2020-03-09 20:56:19

LoRaLoRaWAN无线技术

2022-09-07 18:32:57

并发编程线程

2022-06-06 14:53:02

LoRaLoRaWAN

2022-09-08 18:38:26

LinuxWindowsmacOS

2020-11-09 14:07:53

PyQtQt编程

2022-12-27 17:40:57

意向锁MySQLInnoDB

2024-09-09 13:10:14

点赞
收藏

51CTO技术栈公众号