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

Java 基礎:資料庫事務 ACID 特性與隔離級別全解析

     編輯:Java 綜合教學

什麼是事務?

事務就是一件不可分割的工作單元,所有操作要麼全成功,要麼全失敗回滾。

ACID 四大特性

特性全稱核心含義
AAtomicity(原子性)事務不可分割,全做或全不做
CConsistency(一致性)資料從一個一致狀態轉移到另一個一致狀態(如轉賬:扣款與增款同步)
IIsolation(隔離性)併發事務互不干擾,隔離級別決定干擾程度
DDurability(持久性)提交後的修改永久保存,不會因故障丟失

隔離性是保證一致性的手段;ACID 統服務於資料一致性。

四大隔離級別(JDBC 規範)

  1. READ_UNCOMMITTED(讀未提交):可能髒讀、不可重複讀、幻讀
  2. READ_COMMITTED(讀已提交):防髒讀,可能不可重複讀、幻讀(MySQL 預設)
  3. REPEATABLE_READ(可重複讀):防髒讀、不可重複讀,可能幻讀(InnoDB 預設)
  4. SERIALIZABLE(串行化):完全串行,最高隔離,效能最低

由上至下:併發性能遞減,安全性遞增。

三大併發異常

  • 髒讀:事務 A 讀到事務 B 未提交 的數據(任何隔離級別都應禁止)
  • 不可重複讀:事務 A 兩次讀同一行,事務 B 修改並提交 導致結果不同
  • 幻讀:事務 A 兩次查詢同一範圍,事務 B 新增並提交 導致行數變化

隔離級別 vs 異常對應表

隔離級別              髒讀  不可重複讀  幻讀
READ_UNCOMMITTED       Y      Y         Y
READ_COMMITTED         N      Y         Y
REPEATABLE_READ        N      N         Y
SERIALIZABLE           N      N         N

資料庫層面實現:鎖機制

  • 插入數據 → 鎖表
  • 更新數據 → 鎖行
  • InnoDB 採用 MVCC(多版本併發控制)+ 鎖,實現 REPEATABLE_READ 且大幅減少鎖衝突。

總結圖示

事務 ACID 與隔離級別總結圖

理解事務本質與隔離級別權衡,是設計高併發資料存取邏輯的基石。

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