mysql間隙鎖導致死鎖

2021-09-02 16:16:21 字數 921 閱讀 4419

間隙鎖的分析:

表結構如下:

create table `test_gap` (

`id` int(11) not null, -- 主鍵

`name` varchar(255) not null, -- 非唯一索引

primary key (`id`),

key `name` (`name`)

) engine=innodb default charset=utf8;

表中資料如下:

假設update name = 'c' 或者 delete name = 'c'  會產生間隙鎖:

此時會去尋找非唯一索引的間隙鎖的上下區間,對應表裡資料區間就是(a,e);

1:如果插入的資料,屬於(a,e)之間,既b,d,此時無法插入,因為b,d被間隙鎖鎖定

2:如果插入的資料,不屬於(a,e)之間,那麼不受間隙鎖影響,自由插入

3:如果插入的資料,等於a或者e,此時需要再根據主鍵來判斷鎖定範圍:

1):如果是a,則取a的最大值id為50,只要插入的資料id<50則可以自由插入,id>50既全部鎖定無法插入

2):如果是e,則取e的最小值id為30,只要插入的資料id>30則可以自由插入,id<30既全部鎖定無法插入

那麼開始模擬死鎖情景

執行順序:1,2,3,4

mysql鎖 innodb間隙鎖死鎖分析

前言 在上篇裡分析了一次mysql死鎖問題,後來又深入研究了下死鎖的其他場景,innodb間隙鎖場景下也可能會發生死鎖,所以進一步鞏固下間隙鎖的知識 gap鎖定義 1.gap就是索引樹中插入新記錄的空隙 2.相應的gap鎖就是加在gap上的鎖 gap鎖作用 防止幻讀,通過間隙鎖阻止特定條件的新記錄的...

mysql間隙鎖 mysql間隙鎖

前面一文 mysql鎖 介紹了mysql innodb儲存引擎的各種鎖,本文介紹一下innodb儲存引擎的間隙鎖,就以下問題展開討論 1.什麼是間隙鎖?間隙鎖是怎樣產生的?2.間隙鎖有什麼作用?3.使用間隙鎖有什麼隱患?一 間隙鎖的基本概念 1.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...

mysql 間隙鎖 mysql間隙鎖 轉

前面一文 mysql鎖 介紹了mysql innodb儲存引擎的各種鎖,本文介紹一下innodb儲存引擎的間隙鎖,就以下問題展開討論 1.什麼是間隙鎖?間隙鎖是怎樣產生的?2.間隙鎖有什麼作用?3.使用間隙鎖有什麼隱患?一 間隙鎖的基本概念 1.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...