事務隔離性與傳播性概述

2021-09-01 07:35:27 字數 1826 閱讀 9573

什麼是事務?

從四個關鍵概念談起:

原子性– 所有操作要麼都成功,要麼都失敗

一致性– 事務不能違反完整性約束(比如雖然事務還未提交,但仍需遵守各種約束規則,這些規則是在事務提交之前而非在事務提交以後才生效!)

隔離性– 乙個事務的效果,不影響正在同時執行的其它事務,那麼,不影響的程度如何呢?這個由隔離級別來定義,標準的隔離級別有下列四種:

          未提交讀(read uncommitted)

          提交讀(read committed)

          重複讀(repeatable read)

          序列化(serializable)

通過一些現象可看出隔離級別的效果:

髒讀– (dirty read) 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。

不可重複讀– (nonrepeatable read) 同一查詢在同一事務中多次進行,由於其他提交事務所做的修改或刪除,每次返回不同的結果集,此時發生非重複讀。

幻讀– (phantom read) 同一查詢在同一事務中多次進行,由於其他提交事務所做的插入操作,每次返回不同的結果集,此時發生幻像讀。

dirty read  nonrepeatable read  phantom read 

read uncommitted possible possible possible

read committed not possible possible possible

repeatable read not possible not possible possible

serializable not possible not possible not possible

永續性– 一旦事務成功完成,則資料必需保證已經正確的持久化(儲存)!

jdbc事務與jta事務

jdbc事務只能支援乙個資料庫(單資料來源),而jta可以支援分布式的事務(多資料來源)。

 jdbc事務,一般由資料庫本身來執行提交或回滾操作(單階段提交)。所有資料庫都有它自己的事務管理器,這些管理器只能處理其自身的事務(稱為本地事務)。

 而jta則不同,jta要支援多個資料來源,站在更高的角度上,提供乙個「事務處理監視器(tpm)」來管理和協調這些資料來源之間的事務操作。它必需執行兩階段提交(2pc)協議。

 準備階段 – tpm向所有rm(資源管理器,即資料庫)確認狀態,是否可以提交或回滾

 提交階段 – tpm確認提交之後,向所有rm發出提交指令(或回滾)

 tpm本身會維護事務日誌,以保證永續性(災難恢復等)

傳播特性

not supported – 不支援,如果當前有事務上下文,將掛起當前的事務

supports - 支援,如果有事務,將使用事務,如果沒有事務,將不使用事務

required - 需要,如果當前有事務上下文,將使用當前的上下文事務,如果沒有,將建立新的事務

required new - 需要新的事務,如果當前有事務上下文,將掛起當前的事務,並建立新的事務去執行任務,執行完成之後,再恢復原來的事務

mandatory - 當前必須要有事務上下文,如果當前沒有事務,將丟擲異常

never - 當前必須不能有事務上下文,如果有事務,將丟擲異常

SpringBoot 事務隔離性和傳播性

spring中七種propagation類的事務屬性詳解 宣告式事務的第二個方面是隔離級別。隔離級別定義乙個事務可能受其他併發事務活動活動影響的程度。另一種考慮乙個事務的隔離級別的方式,是把它想象為那個事務對於事物處理資料的自私程度。在乙個典型的應用程式中,多個事務同時執行,經常會為了完成他們的工作...

Spring事務隔離性和傳播性的概念

事務隔離級別 他對其他事務所看到的資料變化進行控制。隔離級別 說明 isolation default 預設級別 對大多數資料庫來說就是isolation read committed isolation read uncommitted 最低的隔離級別。事實上我們不應該隔離級別,因為在事務完成前,...

事務隔離性

事務a 讀取事務b更新的資料,然後事務b回滾,那麼a讀取到的資料就是髒資料 情景展示 1.會話b 可提交讀 set session transaction isolation level read uncommitted begin update account set balance balanc...