mysql innodb支援三種行鎖定方式:
行鎖(record lock):也叫記錄鎖,鎖直接加在索引記錄上面。
間隙鎖(gap lock):鎖加在不存在的空閒空間,可以是兩個索引記錄之間,也可能是第乙個索引記錄之前或最後乙個索引之後的空間。
next-key lock:行鎖與間隙鎖組合起來用就叫做next-key lock。
預設情況下,innodb工作在repeatable read隔離級別下(隔離級別詳細介紹),對主鍵索引、唯一索引以記錄鎖方式對資料進行加鎖,對普通索引以next-key lock的方式對資料行進行加鎖。如果乙個間隙被事務加了鎖,其它事務是不能在這個間隙插入記錄的,這樣可以有效防止幻讀的發生。
要禁止間隙鎖的話,可以把隔離級別降為read committed,或者開啟引數innodb_locks_unsafe_for_binlog,但是修改這個引數會影響到主從複製及災難恢復,所以只有修改**邏輯才是比較好解決的辦法。
Innodb間隙鎖,細節講解
關於innodb間隙鎖,網上有很多資料,在此不做贅述,我們講解一下關於innodb的間隙鎖什麼情況下會產生的問題。網上有些資料說innodb的間隙鎖是為了防止幻讀,這個論點真的是誤人子弟。了解innodb機制的朋友就會知道,innodb實現可重複讀和防止幻讀,用的是讀取快照的方式。間隙鎖的目的只是為...
mysql鎖 innodb間隙鎖死鎖分析
前言 在上篇裡分析了一次mysql死鎖問題,後來又深入研究了下死鎖的其他場景,innodb間隙鎖場景下也可能會發生死鎖,所以進一步鞏固下間隙鎖的知識 gap鎖定義 1.gap就是索引樹中插入新記錄的空隙 2.相應的gap鎖就是加在gap上的鎖 gap鎖作用 防止幻讀,通過間隙鎖阻止特定條件的新記錄的...
mysql間隙鎖 mysql間隙鎖
前面一文 mysql鎖 介紹了mysql innodb儲存引擎的各種鎖,本文介紹一下innodb儲存引擎的間隙鎖,就以下問題展開討論 1.什麼是間隙鎖?間隙鎖是怎樣產生的?2.間隙鎖有什麼作用?3.使用間隙鎖有什麼隱患?一 間隙鎖的基本概念 1.什麼叫間隙鎖 當我們用範圍條件而不是相等條件檢索資料,...