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

InnoDB 隔離級別對並發插入影響:REPEATABLE READ vs READ COMMITTED 間隙鎖差異

     編輯:MySQL 資料庫相關知識

REPEATABLE READ(預設)

  • 唯一索引 + 唯一條件:SELECT ... FOR UPDATE、LOCK IN SHARE MODE、UPDATE、DELETE 僅鎖記錄,**不鎖間隙**。
  • 非唯一條件:採用 Next-Key Lock(記錄+間隙),鎖定掃描範圍,**阻塞並發插入**。
  • 一致性讀:事務內所有普通 SELECT 讀取同一快照(首次讀建立),彼此一致。

READ COMMITTED(類 Oracle 行為)

  • SELECT ... FOR UPDATE、LOCK IN SHARE MODE:**僅鎖記錄,不鎖間隙**,允許緊鄰插入。
  • 唯一索引 + 唯一條件的 UPDATE/DELETE:僅鎖記錄。
  • 範圍 UPDATE/DELETE:仍需 Next-Key/間隙鎖,防止幻讀破壞複製/恢復。
  • 一致性讀:每次 SELECT 讀取最新提交版本,非快照。

遷移建議

  • Oracle 遷移 MySQL,**強烈建議設定 READ COMMITTED**,鎖行為最接近 Oracle,減少遷移期鎖衝突驚喜。
  • 設定方式:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED 或 my.cnf transaction-isolation=READ-COMMITTED。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved