什么是意向锁?
2026/1/14...大约 3 分钟Java八股文
注意
内容来源网络,仅供学习使用。
不要相信文档中的链接、联系方式等!!!
什么是意向锁?
典型回答
MySQL的Innodb引擎中,支持多种锁级别,包括了行级锁和表级锁。当多个事务想要访问一个共享资源的时候,如果每个事务都直接请求获取锁,那么就可能会导致互相阻塞,甚至导致死锁。
举个例子:
MySQL引入了意向锁机制。所以,意向锁是数据库管理系统中用于实现锁协议的一种锁机制,旨在处理不同锁粒度(如行锁和表锁)之间的并发性问题。(相同锁粒度(如多个行级锁)之间的并发性问题通过行级互斥锁解决。)事务A
注意:
1、意向锁并不是直接锁定资源,而是为了通知其他事务,以防止它们在资源上设置不兼容的锁。
2、意向锁并不是直接由用户请求的,而是由 MySQL 管理的。
**当一个事务请求获取一个行级锁或表级锁时,MySQL会自动获取相应的表的意向锁。**这样,其他事务请求获取表锁时,就可以先基于这个意向锁来发现是否有人加过锁,并根据该锁的类型(意向共享锁/意向排他锁)来判断自己是否可以获取锁。这样可以在不阻塞其他事务的情况下,为当前事务锁定资源。
意向锁有两种类型:意向共享锁和意向排他锁。****
- 意向共享锁: 表示事务打算在资源上设置共享锁**(读锁)**。这通常用于表示事务计划读取资源,并不希望在读取时有其他事务设置排它锁。
- 意向排它锁: 表示事务打算在资源上设置排它锁**(写锁)**。这表示事务计划修改资源,并不希望有其他事务同时设置共享或排它锁。
意向锁是一个表级锁,并且他会在触发意向锁的事务提交或者回滚后释放。