一、事務(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)