簡體   English   中英

lock pseudo-record supremum 到底什么時候發生?

[英]when exactly does a lock pseudo-record supremum occur?

我需要一個例子,請

將鎖應用於偽記錄是什么意思?

https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-next-key-locks

對於最后一個時間間隔,next-key 鎖鎖定索引中最大值上方的間隙以及具有比索引中實際值更高的值的“supremum”偽記錄 supremum 不是真正的索引記錄,因此,實際上,這個下一個鍵鎖只鎖定最大索引值之后的間隙。

這是一個例子,但是:

Lock-data: MySQL5.7.11中的supremum pseudo-record with REPEATABLE-READ

我不明白這個問題的答案,這讓我很困惑,因為它是一個帶有 UNIQUE INDEX 的單一搜索條件

當間隙鎖位於表的末尾時,將創建 supremum 鎖。 也就是你的事務鎖了一個gap,沒有比你請求的范圍更大的現存記錄。

在您鏈接到的示例中:

Session 1:

CREATE TABLE a (
  id int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into a values(1);

begin;
select * from a where id=2 for update;

在 REPEATABLE-READ 的默認事務隔離級別中,這鎖定了從 id=2 到無窮大的間隙,這是最高的。

然后在 session 2:

begin;
insert into a values(3);
...waits...

session 1 持有的間隙鎖涵蓋了從 2 到無窮大的所有內容,因此它阻止了 id 3 的插入。

而如果 session 1 的事務隔離級別為 READ-COMMITTED,則它不會獲取間隙鎖。

Session 1:

set transaction_isolation='READ-COMMITTED';

begin;
select * from a where id=2 for update;

Session 2:

mysql> insert into a values(3);
Query OK, 1 row affected (0.00 sec)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM