首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

InnoDB Next-Key Lock 深度解析:間隙鎖如何防止幻讀與阻塞並發插入

     編輯:MySQL 資料庫相關知識

Next-Key Lock = 記錄鎖 + 間隙鎖

  • InnoDB 行鎖實為索引記錄鎖。
  • 鎖定索引記錄 R 時,同時鎖定 R 之前的「間隙」。
  • 阻止其他事務在間隙插入新記錄,防止幻讀。

唯一性檢查應用模式


-- 事務 A
SELECT ... FROM t WHERE pk = 100 LOCK IN SHARE MODE;  -- 讀取並加共享鎖
-- 若無重複,安全插入
INSERT INTO t VALUES (100, ...);  -- Next-Key Lock 阻止並發插入同值

讀過程中對「後繼者」加的 Next-Key Lock 同時阻塞重複插入,實現應用層唯一性檢查。

對並發插入的影響

  • 間隙鎖會阻塞「緊接在已鎖定記錄之前」的插入。
  • 高併發插入熱點(如自增主鍵尾部)可能因間隙鎖產生鎖等待。
  • 可透過降低隔離級別至 READ COMMITTED 減少間隙鎖(見 88368)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved