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

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

事務特性(4種):sql

原子性 (atomicity):強調事務的不可分割.數據庫

一致性 (consistency):事務的執行的先後數據的完整性保持一致.安全

隔離性 (isolation):一個事務執行的過程當中,不該該受到其餘事務的干擾atom

持久性(durability) :事務一旦結束,數據就持久到數據庫 若是不考慮隔離性引起安全性問題: 髒讀 :一個事務讀到了另外一個事務的未提交的數據事務

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

虛幻讀 :一個事務讀到了另外一個事務已經提交的 insert 的數據致使屢次查詢結果不一致. 解決讀問題:it

 

設置事務隔離級別(5種)io

DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.table

未提交讀(read uncommited) :髒讀,不可重複讀,虛讀都有可能發生

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

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

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

Mysql 默認:可重複讀 Oracle 默認:讀已提交 read uncommited:是最低的事務隔離級別,它容許另一個事務能夠看到這個事務未提交的數據。

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

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

serializable:這是花費最高代價但最可靠的事務隔離級別。

事務被處理爲順序執行。除了防止髒讀,不可重複讀以外,還避免了幻象讀(避免三種)。

事務的傳播行爲 PROPAGION_XXX :事務的傳播行爲 * 保證同一個事務中

PROPAGATION_REQUIRED 支持當前事務,若是不存在 就新建一個(默認)

PROPAGATION_SUPPORTS 支持當前事務,若是不存在,就不使用事務

PROPAGATION_MANDATORY 支持當前事務,若是不存在,拋出異常 * 保證沒有在同一個事務中

PROPAGATION_REQUIRES_NEW 若是有事務存在,掛起當前事務,建立一個新的事務

PROPAGATION_NOT_SUPPORTED 以非事務方式運行,若是有事務存在,掛起當前事務

PROPAGATION_NEVER 以非事務方式運行,若是有事務存在,拋出異常

PROPAGATION_NESTED 若是當前事務存在,則嵌套事務執行

相關文章
相關標籤/搜索