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

Oracle 交易 (Transaction) 與 ACID 特性、隔離等級、鎖機制完整解析

     編輯:Oracle 教學

Oracle 交易 (Transaction) 與 ACID 特性、隔離等級、鎖機制完整解析

什麼是交易?

交易是作為單一邏輯工作單元執行的一組相關操作,要求 全部完成 (COMMIT) 或全部不完成 (ROLLBACK),以保證資料安全有效。

ACID 四大特性

特性英文說明
原子性Atomicity交易中所有資料修改,要麼全做,要麼全不做
一致性Consistency交易完成後,所有資料必須處於一致狀態 (滿足完整性約束)
隔離性Isolation並發交易間互不干擾,透過鎖與 MVCC 實現
持久性DurabilityCOMMIT 後的修改永久生效,即便系統故障也不丟失

交易組成與分類

  • 組成:一條或多條 DML,可選一條 DDL,以及一條 DCL (COMMIT/ROLLBACK)
  • 顯式交易:需手動發出 COMMIT 才持久化
  • 隱式交易:SET AUTOCOMMIT ON (僅對當前連線) 或執行 DDL/DCL/正常離開客戶端時自動提交

三大讀取異常現象

  1. 髒讀:T1 修改未提交,T2 讀取;T1 回滾 → T2 讀到無效資料
  2. 不可重複讀:T1 讀取,T2 修改並提交,T1 再讀 → 結果不同
  3. 幻讀:T1 查詢範圍,T2 插入符合條件新列並提交,T1 再查 → 多出新列

SQL-92 隔離等級對照

隔離等級髒讀不可重複讀幻讀Oracle 支援
READ UNCOMMITTED允許允許允許不支援
READ COMMITTED禁止允許允許預設支援
REPEATABLE READ禁止禁止允許不直接支援 (可用 SERIALIZABLE 替代)
SERIALIZABLE禁止禁止禁止支援

Oracle 另提供 READ ONLY 隔離等級 (唯讀交易,保證語句級一致性)。

鎖機制

  • 排它鎖 (X Lock):DML (INSERT/UPDATE/DELETE) 自動加於受影響列,阻擋其他交易讀寫 (SELECT FOR UPDATE 亦同)
  • 共享鎖 (S Lock):單純 SELECT (預設) 不加鎖,Oracle 採用 多版本並發控制 (MVCC),讀不阻寫、寫不阻讀

樂觀鎖 vs 悲觀鎖 (應用層設計模式)

策略假設實作方式適用場景
悲觀鎖衝突機率高讀取時即加鎖 (SELECT FOR UPDATE / 應用層鎖表)高併發寫入、不可容忍衝突
樂觀鎖衝突機率低版本號/時間戳欄位,UPDATE 時比對版本,失敗則重試讀多寫少、長交易、離線場景
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved