事務的基本概念

1. 什麼是事務? 
從四個關鍵概念談起: 
原子性 – 所有操作要麼都成功,要麼都失敗 
一致性 – 事務不能違反完整性約束(比如雖然事務還未提交,但仍需遵守各種約束規則,這些規則是在事務提交之前而非在事務提交以後才生效!) 隔離性 – 一個事務的效果,不影響正在同時執行的其它事務,那麼,不影響的程度如何呢?這個由隔離級別來定義,標準的隔離級別有下列四種: 
(1)未提交讀(read uncommitted) 
髒讀 – (dirty read) 當一個事務讀取另一個事務尚未提交的修改時,產生髒讀。
(2)提交讀(read committed)
不可重複讀 – (nonrepeatable read) 同一查詢在同一事務中多次進行,由於其他
提交事務所做的修改或刪除,每次返回不同的結果集,此時發生非重複讀。
(3)重複讀(repeatable read)
幻讀 – (phantom read) 同一查詢在同一事務中多次進行,由於其他提交事務所做的插入操作,每次返回不同的結果集,此時發生幻像讀。
(4)序列化(serializable) 順序讀取
持久性 – 一旦事務成功完成,則數據必需保證已經正確的持久化(保存)!

2.JDBC事務與JTA事務 
JDBC事務只能支持一個數據庫(單數據源),而JTA可以支持分佈式的事務(多數據源)。 
(1)JDBC事務,一般由數據庫本身來執行提交或回滾操作(單階段提交)。所有數據庫
都有它自己的事務管理器,這些管理器只能處理其自身的事務(稱爲本地事務)。  而JTA則不同,JTA要支持多個數據源,站在更高的角度上,提供一個“事務處理
監視器(TPM)”來管理和協調這些數據源之間的事務操作。它必需執行兩階段提交(2PC)協議。 
(2)準備階段 – TPM向所有RM(資源管理器,即數據庫)確認狀態,是否可以提交
或回滾 
(3)提交階段 – TPM確認提交之後,向所有RM發出提交指令(或回滾)  TPM本身會維護事務日誌,以保證持久性(災難恢復等)

3. 傳播特性 
Not Supported – 不支持,如果當前有事務上下文,將掛起當前的事務 
Supports - 支持,如果有事務,將使用事務,如果沒有事務,將不使用事務 
Required - 需要,如果當前有事務上下文,將使用當前的上下文事務,如果沒有,將創建新的事務 
Required New - 需要新的事務,如果當前有事務上下文,將掛起當前的事務,並創建新的事務去執行任務,執行完成之後,再恢復原來的事務 
Mandatory - 當前必須要有事務上下文,如果當前沒有事務,將拋出異常 Never - 當前必須不能有事務上下文,如果有事務,將拋出異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章