Spring事務與MySQL數據庫隔離級別的關係,方便記憶的Spring事務傳播特性

一、MySQL數據庫存在的3種讀取問題

髒讀:一個事務有可能讀取了另一個事務改寫但沒提交的數據,如果回滾,那讀取的就是無效數據

不可重複讀:在同一個事務中,多次讀取同一數據時,返回的結果卻不相同;後續讀取可能讀取到另一個事務提交的更新數據

幻讀:一個事務讀取幾行記錄後,另一個事務有插入了幾行記錄,在後來的查詢中,第一個事務就會發現原來沒有的記錄

二、Spring事務與MySQL數據庫隔離級別的關係

Spring事務是基於數據庫隔離級別的封裝

4種隔離級別,解決3種讀取問題,高併發爲了下保證ACID,性能會大打折扣
在這裏插入圖片描述

三、Spring事務的傳播特性(方便記憶)

支持
	required	如果當前沒有事務,就新建一個;如果當前存在,就加入當前事務
	supports	支持當前事務,如果不存在,就不使用事務
	mandatory	支持當前事務,如果不存在則拋出異常
	
不支持
	requires_new	如果有事務存在,掛起當前事務,創建一個新的事務
	not_supported	以非事務方式運行,如果事務存在,掛起當前事務
	never	以非事務方式運行,如果事務存在,拋出異常
	
嵌套
	nested	如果當前存在事務,則在嵌套事務內執行;如果當前沒有事務,則執行required類似操作

四、 事務的4個基本特性:ACID(附加)

原子性(Atomicity):事務是一個原子操作,由一系列動作組成;事務的原子性確保動作要麼全部完成,要麼完全不起作用

一致性(Consistency):一旦事務完成(不管成功還是失敗),系統必須確保它所建模的業務處於一致的狀態,而不會是部分完成部分失敗;在現實中的數據不應該被破壞

隔離性(Isolation):可能有許多事務會同時處理相同的數據,因此每個事務都應該與其他事務隔離開來,防止數據損壞

持久性(Durability):一旦事務完成,無論發生什麼系統錯誤,它的結果都不應該受到影響,這樣就能從任何系統崩潰中恢復過來;通常情況下,事務的結果被寫到持久化存儲器中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章