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

MySQL 事務核心原理:ACID 特性、隔離級別與傳播機制完整教程

     編輯:MySQL 資料庫相關知識

事務定義與 ACID 四大特性

事務是一組數據庫操作序列,構成邏輯執行單元:要麼全做,要麼全不做。

特性英文核心含義
原子性Atomicity事務是不可分割的最小邏輯單元,所有操作要麼全提交,要麼全回滾。
一致性Consistency事務執行前後,數據庫從一個一致性狀態轉移到另一個一致性狀態(由原子性保證)。
隔離性Isolation並發事務間互不干擾,看不到彼此中間狀態。
持久性Durability提交後的修改永久保存至物理存儲,掉電不丟失。

並發異常與四大隔離級別

三大讀異常

  • 髒讀:讀到未提交數據(違反隔離性)。
  • 不可重復讀:同一事務兩次讀取同一行,數據不同(被其他事務修改提交)。
  • 幻讀:同一查詢條件重新執行,發現新增滿足條件的行(被其他事務插入)。

標準隔離級別對比

級別髒讀不可重復讀幻讀鎖/並發特點
READ UNCOMMITTED✅ 可能✅ 可能✅ 可能非鎖定讀,並發最高,數據最不安全
READ COMMITTED❌ 解決✅ 可能✅ 可能只讀已提交,每次 SELECT 重新生成 ReadView
REPEATABLE READ (InnoDB 默認)❌ 解決❌ 解決⚠️ 理論存在,但 Next-Key Lock 大幅緩解事務啟動時建立 ReadView,全程可重複讀
SERIALIZABLE❌ 解決❌ 解決❌ 解決所有 SELECT 隱式加共享鎖,讀寫互斥,並發最低

隔離級別對比表

事務組成與提交方式

  • 一組 DML(INSERT/UPDATE/DELETE)+ 至多一條 DDL/DCL(DDL/DCL 會隱式提交事務)。
  • 顯式提交:COMMIT;
  • 自動提交:執行 DDL/DCL、或會話正常斷開(autocommit=ON 時每條語句自動提交)。

事務傳播行為(Spring @Transactional propagation)

定義外層事務調用內層事務時的策略:

傳播類型行為描述回滾影響範圍
REQUIRED (默認)有事務則加入,無則新建任一回滾 → 全部回滾
SUPPORTS有事務則加入,無則以非事務運行非事務模式下異常不回滾
MANDATORY必須在事務中運行,否則拋異常同 REQUIRED
REQUIRES_NEW掛起當前事務,強制新建獨立事務內層提交後外層回滾,內層不受影響;內層回滾拋異常被外層捕獲,外層可選提交
NOT_SUPPORTED掛起當前事務,以非事務運行無事務邊界
NEVER不能在事務中運行,否則拋異常—
NESTED基於 Savepoint 嵌套,依賴外層事務外層回滾 → 內層回滾;內層回滾到 Savepoint,外層可選提交

關鍵區別:REQUIRES_NEW 開啟獨立物理事務,NESTED 僅在邏輯上劃分 Savepoint,提交綁定外層事務。

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