spring事務機制研究
傳播機制的** 無外乎 方法呼叫方法 事務存在的方式的研究(新建事務,不用事務,使用當前事務)
隔離級別的**:關注點需要care
幻讀是針對於:表級資料量級增減變化,如增加幾行資料 很難避免要看到。
不可重複讀針對於:行記錄級 該條記錄資料本身變化
#### 事務特性
- a 原子性(atomicity)
- c 一致性(consistency)
- i 隔離性(isolation)
- d 永續性(durability)
#### 五種狀態
- 活動狀態
事務在執行時的狀態叫活動狀態
- 部分提交狀態
事務中最後一條語句被執行後的狀態叫部分提交狀態
- 失敗狀態
事務不能正常執行的狀態叫失敗狀態
- 提交狀態
事務在部分提交後,將往硬碟上寫入資料,當最後一條資訊寫入後的狀態叫提交狀態。進入提交狀態的事務就成功完成了
- 中止狀態
事務回滾並且資料庫已經恢復到事務開始執行前的狀態叫中止狀態
#### 傳播機制(propagation)
- propagation_require,如果當前沒有事務, 就新建乙個事務, 如果已經存在乙個事務中,加入到這個事務中。該項是spring的預設配置項。
- propagation_supports,持當前事務,如果當前沒有事務,就以非事務方式執行。
- propagation_mandatory,使用當前的事務,如果當前沒有事務,就丟擲異常。
- propagation_requires_new,新建事務,如果當前存在事務,把當前事務掛起。
- propagation_not_supported,以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
- propagation_never,非事務方式執行,如果當前存在事務,則丟擲異常。
- propagation_nested,如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與 propagation_required 類似的操作。
#### 隔離級別(isolation)
- read uncommitted,未提交讀,所有事務都可以看到其他未提交事務的執行結果,讀取未提交的資料,也被稱之為髒讀(dirty read)。
- read committed,提交讀,事務只能看見已經提交事務所做的改變。
- repeatable read,可重複讀,是mysql的預設事務隔離級別,它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。但可能出現幻讀(phantom read),幻讀指當使用者讀取某一範圍的資料行時,另乙個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的"幻影" 行。
- serializable,序列化,是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
- 隔離級別解決問題
- 髒讀(drity read),某個事務已更新乙份資料,另乙個事務在此時讀取了同乙份資料,由於某些原因,前乙個rollback了操作,則後乙個事務所讀取的資料就會是不正確的。
- 不可重複讀(non-repeatable read),在乙個事務的兩次查詢之中資料不一致,這可能是兩次查詢過程中間插入了乙個事務更新的原有的資料。
- 幻讀(phantom read),在乙個事務的兩次查詢中資料筆數不一致,例如有乙個事務查詢了幾列(row)資料,而另乙個事務卻在此時插入了新的幾列資料,先前的事務在接下來的查詢中,就會發現有幾列資料是它先前所沒有的。
- mysql中四種隔離級別
| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
| :--- | :---: | :---: | :---: |
| read uncommitted | o | o | o |
| read committed | x | o | o |
| repeatable read | x | x | o |
| serializable | x | x | x|
Spring 事務 事務控制
0 註解 autowire 自動注入 url url b 1 spring專案中事務手動回滾 b transactionaspectsupport.currenttransactionstatus setrollbackonly 或者丟擲異常 transactional rollbackfor pu...
Spring事務(一) Spring事務的使用
事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...
Spring事務(二) Spring事務的特點
實現事務必須滿足以下四大特性 隔離性 通過mvvc實現 相對應的有mvcc 原子性 一致性 永續性 通過資料庫的redo log undo log force log at commit實現 資料庫是可以控制事務的傳播和隔離級別的,spring在之上又進一步做了封裝,本質上是同一概念。事務的四大特性...