首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL InnoDB 鎖機制深度解析 (一):四大鎖類型與相容矩陣

     編輯:MySQL 綜合教學

MySQL InnoDB 鎖機制深度解析 (一):四大鎖類型與相容矩陣

InnoDB 採用多粒度鎖策略,包含四種核心鎖類型:

鎖類型俗稱層級說明
共享鎖 (S Lock)讀鎖行級持有者可讀,不可改;其他事務可加 S 鎖,不可加 X 鎖。
排他鎖 (X Lock)寫鎖行級持有者可讀可改;其他事務不可加任何鎖。
意向共享鎖 (IS Lock)表級意向鎖表級事務欲對表中行加 S 鎖前,必須先對表加 IS (或更強的 IX)。
意向排他鎖 (IX Lock)表級意向鎖表級事務欲對表中行加 X 鎖前,必須先對表加 IX。

加鎖流程範例

  • SELECT ... LOCK IN SHARE MODE:先加表級 IS 鎖,成功後對符合條件的行加 S 鎖。
  • SELECT ... FOR UPDATE:先加表級 IX 鎖,成功後對行加 X 鎖。

鎖相容性矩陣 (✓=相容, ✗=衝突)

XIXSIS
X✗✗✗✗
IX✗✓✗✓
S✗✗✓✓
IS✗✓✓✓

官方死鎖案例逐幀分析

  1. Session S1:SELECT * FROM t WHERE i=1 LOCK IN SHARE MODE → 表加 IS,行 (i=1) 加 S。
  2. Session S2:DELETE FROM t WHERE i=1 → 表加 IX (與 IS 相容),行嘗試加 X → 被 S1 的 S 鎖阻塞,等待。
  3. Session S1 再執行 DELETE FROM t WHERE i=1 → 表加 IX (與 S2 的 IX 相容),行嘗試加 X → 發現 S2 持有 IX (IX 與 X 衝突) → 等待。
  4. 形成循環等待:S1 等 S2 釋放 IX,S2 等 S1 釋放 S → 死鎖發生,MySQL 檢測到後回滾其中一個事務 (通常是 S2)。

理解意向鎖的存在意義:讓表級鎖能快速判斷是否有事務已鎖定表中任意行,避免掃描全表行鎖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved