mysql事務基本要素和隔離級別

注意:只是個人理解的手記,不具備權威準確性

mysql事務基本要素和隔離級別

一.事務的四個基本要素

1.原子性:事務中的操作要麼都執行,要麼都回滾

2.一致性:A和B存款各位500,相互轉賬總額保持1000不變,對開發者有要求,不能寫出錯誤邏輯

3.隔離性:多事務併發時,保證各事務處理互不干擾,有四個隔離級別,在併發和干擾之間權衡(需要深入學習鎖知識)

4.持久性:事務一旦提交,數據一定持久化到數據庫,不可回滾,除非執行相反操作事務,mysql通過日誌實現的.

二.事務的隔離級別

1.讀取未提交

A事務會讀取到B事務未提交的更新內容

缺點:如果B回滾了,A會讀取到B的中間狀態,可造成髒讀

2.讀取已提交

A事務可以讀取到B事務提交的更新內容,

優點:因爲只可以讀B提交的內容,所以解決了1中的髒讀問題

缺點:A事務前後查詢的結果可能不一致,可造成不可重複讀

3.可重複讀

A事務讀取的記錄總是第一次查詢的快照,無論B事務提交更新,都不會影響A的查詢結果

優點:因爲A讀取的都是第一次查詢的快照,所以解決了2中不可重複讀的問題,也不會出現1髒讀

缺點:B事務插入的新記錄A中是查詢不到的,但是A事務進行的增刪改會讀取最新記錄,可造成幻讀

擴展:可重複讀下間隙鎖(Gap Lock)可以鎖定一個範圍,防止數據插入避免部分幻讀(需要繼續深入學習鎖知識)

4.串行化

A查詢數據,B可以查詢數據,但是B不可以再增刪改數據

優點:避免了3中的幻讀,當然1的髒讀和2的不可重複讀也不會出現

缺點:增刪改無併發

三.不同隔離性引發的問題

髒讀:讀到了別人未提交的內容

不可重複讀:讀到了別人update的內容

幻讀:未讀到別人insert或delete的內容,但是增刪改時卻存在

四.操作

1.查看全局和當前會話隔離級別

select @@global.tx_isolation, @@tx_isolation;

2.設置全局或當前會話隔離級別

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL

{

REPEATABLE READ

| READ COMMITTED

| READ UNCOMMITTED

| SERIALIZABLE

}

 

 

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