Spring:Spring事務的4種特性、5種隔離級別、7種傳播特性


此文章只作筆記記錄,不作為講解文章

1. 事務的特性(4種)

原子性 (atomicity):強調事務的不可分割.
一致性 (consistency): 事務的執行的前后數據的完整性保持一致.
隔離性 (isolation): 事務執行的過程中, 不受其他事務的干擾, 即並發執行的事物之間互不干擾
持久性(durability) : 事務一旦結束, 數據就持久到數據庫

2. 事務誘發的問題

2.1 臟讀

 事務A讀到了事務B的已操作但未提交的數據.

2.2 不可重復讀

 事務A有多次查詢,第一次讀取數據后繼續運行,第二次讀到了事務B已經提交的 update 的數據導致 事務A 內的多次查詢結果不一致.

2.3 幻讀

 事務A有多次查詢,第一次讀取數據后繼續運行,第二次讀到了事務B已經提交的 insert ( delete )的數據導致 事務A 內的多次查詢結果不一致.

2.4 事務丟失( 回滾丟失 )

 事務A運行增刪改操作后( 還未提交 ),事務B也運行增刪改操作並提交,事務A繼續運行后報錯進行事務回滾時,此時就會把事務B的操作清除掉。

2.5 事務丟失( 提交丟失 )

事務A與事務B同時對一組數據運行增刪改操作,事務B先一步提交事務,事務A繼續運行后也提交事務,此時就會把事務B的操作清除掉。

3. 數據庫的事務隔離級別(4種)

部分數據庫的默認事務隔離級別為 已提交讀 ;例:SQL Server、Oracle

Mysql的默認事務隔離級別為:可重復讀

4. 事務的隔離級別(5種)

4.1 ISOLATION_DEFAULT 

  使用數據庫默認的隔離級別

4.2 ISOLATION_READ_UNCOMMITTED 

  事務最低的隔離級別 ( 可能會導致 臟讀,不可重復讀,幻讀 )

4.3 ISOLATION_READ_COMMITTED

  保證一個事務修改的數據提交后才能被另外一個事務讀取 ( 可能會導致 不可重復讀,幻讀 )

4.4 ISOLATION_REPEATABLE_READ

  保證一個事務修改的數據提交后才能被另外一個事務讀取 ( 可能會導致 幻讀 )

  保證一個事務讀取數據后,另外一個事務才能修改 ( 可能會導致 幻讀 )

4.5 ISOLATION_SERIALIZABLE

   這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行 ( 執行效率最慢 )

5. 事務的傳播特性(7種)

  ( 事務嵌套調用問題 ) 當事務方法A內部調用事務方法B時,子事務方法B出現事務報錯,其父事務方法A是否回滾事務、事務報錯、正常運行?

注:如下所有配置特性都是作用在子事務方法B的。

 

第一類:父事務方法有事務時,支持父事務方法

5.3 Propagation.SUPPORTS

父方法A沒有標注事務時,子事務方法B按照非事務的方法運行(報錯不回滾);父事務方法A標注事務時,子事務方法B綁定父事務方法A的事務一起運行、回滾、提交、報錯。

5.6 Propagation.REQUIRED

父方法A沒有標注事務時,子事務方法B新建事務自運行;父事務方法A標注事務時,子事務方法B與父事務方法A的事務合並運行無論哪個事務出錯都一起回滾、或者一起提交。

5.7 Propagation.MANDATORY

父方法A沒有標注事務時,子事務方法B報錯拋出異常;父事務方法A標注事務時,子事務方法B綁定父事務方法A的事務一起運行、回滾、提交、報錯。

 

第二類:父事務方法有事務時,隔離父事務方法另辟新事務運行或者直接報錯

5.1 Propagation.NEVER

父方法A沒有標注事務時,子事務方法B正常運行事務;父事務方法A標注事務時,子事務方法B直接報錯。

5.2 Propagation.NOT_SUPPORTED

父方法A沒有標注事務時,子事務方法B按照非事務的方法運行(報錯不回滾);父事務方法A標注事務時,子事務方法B把父事務方法A掛起,然后子事務方法B按照非事務的方法運行(報錯不回滾),之后子事務方法A繼續運行自己的事務。

5.4 Propagation.REQUIRES_NEW

父方法A沒有標注事務時,子事務方法B新建事務自運行;父事務方法A標注事務時,子事務方法B把父事務方法A掛起,然后子事務方法B新建事務自運行。( 子事務與父事務隔離運行,互不干涉 )

5.5 Propagation.NESTED

父方法A沒有標注事務時,子事務方法B新建事務自運行;父事務方法A標注事務時,子事務方法B回滾時不影響父事務方法A流程,但父事務方法A回滾時會一並回滾子事務方法B的所有操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM