1. 程式人生 > >Spring的四種事務特性,五種隔離級別,七種傳播行為

Spring的四種事務特性,五種隔離級別,七種傳播行為

Spring事務:

什麼是事務:事務邏輯上的一組對資料對操作,組成這些操作的各個邏輯單元,要麼一起成功,要麼一起失敗。

事務特性(4種):

原子性(atomicity):強調事務的不可分割;一致性(consistency):事務的執行前後資料的完整性保持一致;隔離性(isolation):一個事務的執行的過程中,不應該受到其他事務的干擾;永續性(durability):事務一旦結束,資料就持久到資料庫。

如果不考慮隔離性引發的安全性問題:

髒讀:一個事務讀到了另一個事務未提交的資料不可重複讀:一個事務督導另一個事務已經提交的update的資料導致多次查詢結果不一致虛幻讀:一個事務讀到了另一個事務已經提交的insert的資料導致多次查詢結果不一致。

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

DEFAULT這是一個PlatfromTransactionManager預設的隔離級別,使用資料庫預設的事務隔離級別;未提交讀(read uncommited):髒讀,不可重複讀,虛讀都有可能發生已提交讀(read commited):避免髒讀。但是不可重複讀和虛讀都有可能發生;可重複讀(repeatable read):避免髒讀和不可重複讀,但是虛讀有可能發生;序列化的(serializable):避免以上所有讀問題。MySQL預設:可重複讀Oracle預設:已提交讀read uncommitted:是最低讀事務隔離級別,它允許另外一個事務可以看到這個事務未提交讀資料。read commited: 保證一個事務提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的資料。repeatable read:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能會出現幻想讀。它除了保證一個事務不能被另外一個事務讀取未提交讀資料之外還避免了一下情況產生(不可重複讀)。serializable:這是花費最高代價但最可靠但事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀之外,還避免了幻象讀(避免三種)。

事務讀傳播行為

PROPAGION_XXX:事務的傳播行為*保證同一個事務中PROPAGATION_REQUIRED支援當前事務,如果不存在,就新建一個(預設)PROPAGATION_SUPPORTS支援當前事務,如果不存在,就不適用事務PROPAGATION_MANDATORY 支援當前事務,如果不存在,丟擲異常*保證沒有在同一個事務中PROPAGATION_REQUIRES_NEW如果有事務存在,掛起當前事務,建立一個新的事務PROPAGATION_NOT_SUPPORTED 以非事務方式執行,如果有事務存在,掛起當前事務PROPAGATION_NEVER 以非事務方式執行,如果有事務存在,丟擲異常PROPAGATION_NESTED 如果當前事務存在,則巢狀事務執行

相信夢想是價值的源泉,相信眼光決定未來的一切,相信成功的信念比成功本身更重要,相信人生有挫折沒有失敗,相信生命的質量來自決不妥協的信念!!!