spring之事務(wù)詳解

一、事務(wù)的特性(ACID)

1、原子性(Atomicity)

原子性是指事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾。

2、一致性(Consistency)

一致性是指事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另一個一致性狀態(tài),也就是說一個事務(wù)執(zhí)行之前和執(zhí)行之后都必須處于一致性狀態(tài)。

3、隔離性(Isolation)

隔離性是當多個用戶并發(fā)訪問數(shù)據(jù)庫時,比如操作同一張表時,數(shù)據(jù)庫為每一個用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個并發(fā)事務(wù)之間要相互隔離。

4、持久性(Durability)

持久性是指一個事務(wù)一旦被提交了,那么對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會丟失提交事務(wù)的操作。

二、事務(wù)的問題

1、臟讀(Dirty Reads)

一個事務(wù)正在對數(shù)據(jù)進行更新操作,但是更新還未提交,另一個事務(wù)這時也來操作這組數(shù)據(jù),并且讀取了前一個事務(wù)還未提交的數(shù)據(jù),而前一個事務(wù)如果操作失敗進行了回滾,后一個事務(wù)讀取的就是錯誤數(shù)據(jù),這樣就造成了臟讀。

2、不可重復(fù)讀(Non-Repeatable Reads)

一個事務(wù)多次讀取同一數(shù)據(jù),在該事務(wù)還未結(jié)束時,另一個事務(wù)也對該數(shù)據(jù)進行了操作,而且在第一個事務(wù)兩次次讀取之間,第二個事務(wù)對數(shù)據(jù)進行了更新,那么第一個事務(wù)前后兩次讀取到的數(shù)據(jù)是不同的,這樣就造成了不可重復(fù)讀。

3、幻讀(Phantom Reads)

第一個數(shù)據(jù)正在查詢符合某一條件的數(shù)據(jù),這時,另一個事務(wù)又插入了一條符合條件的數(shù)據(jù),第一個事務(wù)在第二次查詢符合同一條件的數(shù)據(jù)時,發(fā)現(xiàn)多了一條前一次查詢時沒有的數(shù)據(jù),仿佛幻覺一樣,這就是幻讀。

三、事務(wù)的傳播行為

1、PROPAGATION_REQUIRED(默認)

如果存在一個事務(wù),則支持當前事務(wù)。如果沒有事務(wù)則開啟一個新的事務(wù)。

2、PROPAGATION_MANDATORY

支持當前事務(wù),如果當前沒有事務(wù),就拋出異常。

3、PROPAGATION_NEVER

以非事務(wù)方式執(zhí)行,如果當前存在事務(wù),則拋出異常。

4、PROPAGATION_NOT_SUPPORTED

以非事務(wù)方式執(zhí)行操作,如果當前存在事務(wù),就把當前事務(wù)掛起。

5、PROPAGATION_REQUIRES_NEW

新建事務(wù),如果當前存在事務(wù),把當前事務(wù)掛起。

6、PROPAGATION_SUPPORTS

支持當前事務(wù),如果當前沒有事務(wù),就以非事務(wù)方式執(zhí)行。

7、PROPAGATION_NESTED

支持當前事務(wù),新增Savepoint點,與當前事務(wù)同步提交或回滾。

四:事務(wù)的隔離級別

0、DEFAULT (默認)

這是一個PlatfromTransactionManager默認的隔離級別,使用數(shù)據(jù)庫默認的事務(wù)隔離級別.另外四個與JDBC的隔離級別相對應(yīng)

1、READ_UNCOMMITTED (讀未提交)

這是事務(wù)最低的隔離級別,它允許另外一個事務(wù)可以看到這個事務(wù)未提交的數(shù)據(jù)。這種隔離級別會產(chǎn)生臟讀,不可重復(fù)讀和幻像讀。

2、READ_COMMITTED (讀已提交)

保證一個事務(wù)修改的數(shù)據(jù)提交后才能被另外一個事務(wù)讀取。另外一個事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級別可以避免臟讀出現(xiàn),但是可能會出現(xiàn)不可重復(fù)讀和幻像讀。

3、REPEATABLE_READ (可重復(fù)讀)

這種事務(wù)隔離級別可以防止臟讀,不可重復(fù)讀。但是可能出現(xiàn)幻像讀。它除了保證一個事務(wù)不能讀取另一個事務(wù)未提交的數(shù)據(jù)外,還保證了不可重復(fù)讀

4、SERIALIZABLE(串行化)

這是花費最高代價但是最可靠的事務(wù)隔離級別。事務(wù)被處理為順序執(zhí)行。除了防止臟讀,不可重復(fù)讀外,還避免了幻像讀。

五、隔離級別解決事務(wù)并行引起的問題

臟讀 不可重復(fù)讀 幻讀
Serializable 不會 不會 不會
REPEATABLE READ 不會 不會
READ COMMITTED 不會
Read Uncommitted

注:非原創(chuàng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容