spring的事務中的457(4種事務特性,5種隔離級別,7種傳播行爲)

spring事務

什麼是事務

事務邏輯上的一組操做,組成這組操做的各個邏輯單元,要麼一塊兒成功,要麼一塊兒失敗.spring

事務特性(4種)

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

若是不考慮隔離性引起安全性問題

髒讀  :一個事務讀到了另外一個事務的未提交的數據 
不可重複讀 :一個事務讀到了另外一個事務已經提交的 update 的數據致使屢次查詢結果不一致. 
虛幻讀 :一個事務讀到了另外一個事務已經提交的 insert 的數據致使屢次查詢結果不一致.數據庫

解決讀問題: 設置事務隔離級別值(5種)

  • DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別. 
  • 讀未提交(read uncommited)  :髒讀,不可重複讀,虛讀都有可能發生

(是最低的事務隔離級別,它容許另一個事務能夠看到這個事務未提交的數據。) 安全

  • 讀已提交  (read commited):避免髒讀。可是不可重複讀和虛讀有可能發生 

保證一個事物提交後才能被另一個事務讀取。另一個事務不能讀取該事物未提交的數據。 atom

  • 讀可重複 (repeatable read) :避免髒讀和不可重複讀.可是虛讀有可能發生

這種事務隔離級別能夠防止髒讀,不可重複讀。可是可能會出現幻象讀。它除了保證一個事務不能被另一個事務讀取未提交的數據以外還避免瞭如下狀況產生(不可重複讀)。 spa

  • 串行化的 (serializable) :避免以上全部讀問題. 

Mysql 默認:可重複讀 
Oracle 默認:讀已提交
事務

事務的傳播行爲 (7種)

PROPAGION_XXX  :事務的傳播行爲 
* 保證同一個事務中 
PROPAGATION_REQUIRED 支持當前事務,若是不存在 就新建一個(默認) 
PROPAGATION_SUPPORTS 支持當前事務,若是不存在,就不使用事務 
PROPAGATION_MANDATORY  支持當前事務,若是不存在,拋出異常 
* 保證沒有在同一個事務中 
PROPAGATION_REQUIRES_NEW  若是有事務存在,掛起當前事務,建立一個新的事務 
PROPAGATION_NOT_SUPPORTED  以非事務方式運行,若是有事務存在,掛起當前事務 
PROPAGATION_NEVER 以非事務方式運行,若是有事務存在,拋出異常 
PROPAGATION_NESTED 若是當前事務存在,則嵌套事務執行ci

相關文章
相關標籤/搜索