记录锁、间隙锁、Next-key 锁、Insert Intention Locks 和 AUTO-INC Locks 是 Intention Locks 的一部分吗?

Posted

技术标签:

【中文标题】记录锁、间隙锁、Next-key 锁、Insert Intention Locks 和 AUTO-INC Locks 是 Intention Locks 的一部分吗?【英文标题】:Are record locks, gap locks, Next-key locks, Insert Intention Locks and AUTO-INC Locks the part of Intention Locks? 【发布时间】:2021-10-23 14:19:54 【问题描述】:

根据mysql的documentation,所有的锁类型都是不同类型的锁。但是它们都使用 FOR SHARE 或 FOR UPDATE 指令作为 Intention Locks。所以我不明白记录锁、间隙锁、下一个键锁、插入意向锁和 AUTO-INC 锁是意向锁的一部分,或者这是完全不同类型的锁,但语法相同

【问题讨论】:

你是怎么得到这个概念的?答案显然是否定的 比如有个例子,记录锁看起来像 SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;在记录锁部分的文档中 FOR update 会对选中的行执行一个行锁,但是如果你有很多行你会得到一个表锁,这与意向锁无关 我不是 100% 确定您在问什么,但为了澄清该文档:这些锁不是您直接选择的。你告诉 MySQL 你的隔离级别,写你的查询(也许指定for update/share),然后 MySQL 会自己选择正确的 internal 锁来确保正确的行为。这些细节“只是”一个技术文档,您可以绝对正确地使用 MySQL,而无需听说过下一个键锁。 【参考方案1】:

不,您将意图锁与不同类型的实际锁混为一谈!

正如您在问题中链接的 mysql 文档所说(重点是我的):

意向锁是表级锁,它指示事务需要稍后对其中的行使用哪种类型的锁(共享或独占)一张桌子。

您列出的所有其他锁都是执行插入、更新或删除语句时使用的实际锁。

【讨论】:

以上是关于记录锁、间隙锁、Next-key 锁、Insert Intention Locks 和 AUTO-INC Locks 是 Intention Locks 的一部分吗?的主要内容,如果未能解决你的问题,请参考以下文章

推荐:mysql锁 innodb下的记录锁,间隙锁,next-key锁

Mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁

Mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁

MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?

MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?

mysql锁之Next-Key Locks