Spring事務隔離級別、事務傳播特性和數據庫事務隔離級別


事務特性(4種):
原子性 (atomicity):強調事務的不可分割.
一致性 (consistency):事務的執行的前后數據的完整性保持一致.
隔離性 (isolation):一個事務執行的過程中,不應該受到其他事務的干擾
持久性(durability) :事務一旦結束,數據就持久到數據庫

 

如果不考慮隔離性引發安全性問題:
臟讀 :一個事務讀到了另一個事務的未提交的數據
不可重復讀 :一個事務讀到了另一個事務已經提交的 update 的數據導致多次查詢結果不一致.
虛幻讀 :一個事務讀到了另一個事務已經提交的 insert 的數據導致多次查詢結果不一致.

不可重復讀重點在修改。

幻讀重點在新增或刪除。

 

解決讀問題: 設置事務隔離級別(5種)
DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.
未提交讀(read uncommited) :臟讀,不可重復讀,虛讀都有可能發生
已提交讀 (read commited):避免臟讀。但是不可重復讀和虛讀有可能發生  (需事務提交)
可重復讀 (repeatable read) :避免臟讀和不可重復讀.但是虛讀有可能發生. (行鎖)
串行化的 (serializable) :避免以上所有讀問題. (表鎖)
Mysql 默認:可重復讀
Oracle 默認:讀已提交

 

 

 

事務的傳播行為


propagion_XXX :事務的傳播行為


* 保證同一個事務中
propagion_required: 支持當前事務,如果不存在 就新建一個(默認)
propagion_supports: 支持當前事務,如果不存在,就不使用事務
propagion_mandatory: 支持當前事務,如果不存在,拋出異常


* 保證沒有在同一個事務中
propagion_requires_new:  如果有事務存在,掛起當前事務,創建一個新的事務
propagion_not_supported: 以非事務方式運行,如果有事務存在,掛起當前事務
propagion_never: 以非事務方式運行,如果有事務存在,拋出異常
propagion_nested: 如果當前事務存在,則嵌套事務執行

 

參考文章:

MySQL的四種事務隔離級別

spring的4種事務特性,5種隔離級別,7種傳播行為

有關Spring事務,看這一篇就足夠了


免責聲明!

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



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