間隙鎖的分析:
表結構如下:
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.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...