MySQL 插入意向锁的作用是什么?

2020-07-02 10:37:14 +08:00
 JasonLaw

我查看了MySQL :: MySQL 8.0 Reference Manual :: 15.7.1 InnoDB Locking - Insert Intention Locks,里面有这么一段话。

The following example demonstrates a transaction taking an insert intention lock prior to obtaining an exclusive lock on the inserted record. The example involves two clients, A and B.

Client A creates a table containing two index records (90 and 102) and then starts a transaction that places an exclusive lock on index records with an ID greater than 100. The exclusive lock includes a gap lock before record 102:

mysql> CREATE TABLE child (id int(11) NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
mysql> INSERT INTO child (id) values (90),(102);

mysql> START TRANSACTION;
mysql> SELECT * FROM child WHERE id > 100 FOR UPDATE;
+-----+
| id  |
+-----+
| 102 |
+-----+

Client B begins a transaction to insert a record into the gap. The transaction takes an insert intention lock while it waits to obtain an exclusive lock.

mysql> START TRANSACTION;
mysql> INSERT INTO child (id) VALUES (101);

但是我不太理解插入意向锁存在的意义是什么?它的作用是什么呢?能够防止什么操作并发执行?就像上面的例子,如果 Client B 不需要在获取独占锁前获取插入意向锁,而是直接获取独占锁,Client B 也会因为 Client A 已经拥有的间隙锁(90, 102)而等待。是我哪里理解错了吗?

3295 次点击
所在节点    数据库
25 条回复
JasonLaw
2020-07-02 17:42:58 +08:00
@TouchQQ 你说插入意向锁是用来解决并发问题的,它解决的是什么并发问题呢?还有“首先插入意向锁是一种类型的间隙锁,锁模式是 IX, 而一般说的间隙锁( Gap Locks )锁模式是 X”这句话,我不太理解,可以具体解释一下吗?
JasonLaw
2020-07-03 18:13:35 +08:00
@luckyrayyy @showhand @taoprogramer @TouchQQ @makese @salamanderMH @qsfun 大家好,查阅了很多资料之后,我整理[插入意向锁真的是间隙锁吗? - 简书]( https://www.jianshu.com/p/a449eda843b9)这篇文章,欢迎查看,如果有错误的话,欢迎指出。
JasonLaw
2020-07-03 18:15:46 +08:00
@luckyrayyy @showhand @taoprogramer @TouchQQ @makese @salamanderMH @qsfun

上一条有点问题,再打扰一次🤣

插入意向锁真的是间隙锁吗? - 简书 https://www.jianshu.com/p/a449eda843b9
JasonLaw
2020-07-05 13:54:58 +08:00
上面那篇文章是不正确的,我准备取消那篇文章的发布。不过我在这里贴出两个问题,[mysql - Is insert intention lock truly a gap lock? - Stack Overflow]( https://stackoverflow.com/questions/62712571/is-insert-intention-lock-truly-a-gap-lock)和[mysql - Does transaction release insert intention lock after insertion? - Stack Overflow]( https://stackoverflow.com/questions/62737123/does-transaction-release-insert-intention-lock-after-insertion)。欢迎大家解答这两个问题,谢谢。
salamanderMH
2020-07-05 20:30:14 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/686462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX