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

MySQL 事務處理核心:ACID 特性與隔離級別完整圖解

     編輯:MySQL 綜合教學

MySQL 事務處理核心:ACID 特性與隔離級別完整圖解

一、事務通用性

事務非 MySQL 專有,InnoDB 存儲引擎提供完整 ACID 支援。

二、ACID 四大特性

特性核心定義
原子性事務是不可分割的最小工作單元:所有操作要麼全提交,要麼全回滾,不存在部分執行。
一致性資料庫從一個一致性狀態轉換到另一個一致性狀態(完整性約束、觸發器、外鍵均滿足)。
隔離性一個事務的修改在提交前對其他事務不可見(具體可見度由隔離級別決定)。
持久性事務一旦提交,修改永久保存,不會因崩潰丟失(Redo Log 保證)。

三、四大隔離級別對比

隔離級別髒讀不可重複讀幻讀加鎖讀備註
READ UNCOMMITTEDYesYesYesNo讀未提交,並發最高
READ COMMITTEDNoYesYesNo讀已提交,Oracle/PG 預設
REPEATABLE READNoNoYesNoMySQL InnoDB 預設,MVCC 快照讀
SERIALIZABLENoNoNoYes完全串行,並發最低

四、現象定義

  • 髒讀:讀到其他事務未提交的修改。
  • 不可重複讀:同一事務兩次讀同一行,結果不同(被 UPDATE/DELETE)。
  • 幻讀:同一事務兩次範圍查詢,行數不同(被 INSERT)。

五、InnoDB 實現細節

  1. MVCC:REPEATABLE READ 下,事務啟動建立 Read View,普通 SELECT 讀快照,不加鎖。
  2. Next-Key Lock:範圍查詢加間隙鎖+記錄鎖,最大程度防止幻讀。
  3. SERIALIZABLE:隱式將 SELECT 轉為 LOCK IN SHARE MODE,讀寫互斥。

六、設定與查看

SELECT @@transaction_isolation;           -- 會話級
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;  -- 需重連

七、選型指南

  • 預設 REPEATABLE READ:絕大多數業務首選。
  • READ COMMITTED:高並發、可容忍不可重複讀、需減少間隙鎖衝突(配合 binlog_format=ROW)。
  • SERIALIZABLE:極高一致性、低並發報表場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved