事務是一組數據庫操作序列,構成邏輯執行單元:要麼全做,要麼全不做。
| 特性 | 英文 | 核心含義 |
|---|---|---|
| 原子性 | Atomicity | 事務是不可分割的最小邏輯單元,所有操作要麼全提交,要麼全回滾。 |
| 一致性 | Consistency | 事務執行前後,數據庫從一個一致性狀態轉移到另一個一致性狀態(由原子性保證)。 |
| 隔離性 | Isolation | 並發事務間互不干擾,看不到彼此中間狀態。 |
| 持久性 | Durability | 提交後的修改永久保存至物理存儲,掉電不丟失。 |
| 級別 | 髒讀 | 不可重復讀 | 幻讀 | 鎖/並發特點 |
|---|---|---|---|---|
| READ UNCOMMITTED | ✅ 可能 | ✅ 可能 | ✅ 可能 | 非鎖定讀,並發最高,數據最不安全 |
| READ COMMITTED | ❌ 解決 | ✅ 可能 | ✅ 可能 | 只讀已提交,每次 SELECT 重新生成 ReadView |
| REPEATABLE READ (InnoDB 默認) | ❌ 解決 | ❌ 解決 | ⚠️ 理論存在,但 Next-Key Lock 大幅緩解 | 事務啟動時建立 ReadView,全程可重複讀 |
| SERIALIZABLE | ❌ 解決 | ❌ 解決 | ❌ 解決 | 所有 SELECT 隱式加共享鎖,讀寫互斥,並發最低 |

COMMIT;autocommit=ON 時每條語句自動提交)。定義外層事務調用內層事務時的策略:
| 傳播類型 | 行為描述 | 回滾影響範圍 |
|---|---|---|
| REQUIRED (默認) | 有事務則加入,無則新建 | 任一回滾 → 全部回滾 |
| SUPPORTS | 有事務則加入,無則以非事務運行 | 非事務模式下異常不回滾 |
| MANDATORY | 必須在事務中運行,否則拋異常 | 同 REQUIRED |
| REQUIRES_NEW | 掛起當前事務,強制新建獨立事務 | 內層提交後外層回滾,內層不受影響;內層回滾拋異常被外層捕獲,外層可選提交 |
| NOT_SUPPORTED | 掛起當前事務,以非事務運行 | 無事務邊界 |
| NEVER | 不能在事務中運行,否則拋異常 | — |
| NESTED | 基於 Savepoint 嵌套,依賴外層事務 | 外層回滾 → 內層回滾;內層回滾到 Savepoint,外層可選提交 |
關鍵區別:REQUIRES_NEW 開啟獨立物理事務,NESTED 僅在邏輯上劃分 Savepoint,提交綁定外層事務。