數據庫事務4種隔離級別及7種傳播行爲

一:數據庫的事物隔離級別與傳播行爲總結:

            

很多人容易搞混不可重複讀和幻讀,確實這兩者有些相似。但不可重複讀重點在於update和delete,而幻讀的重點在於insert。
避免不可重複讀需要鎖行就行
避免幻影讀則需要鎖表
如果使用鎖機制來實現這兩種隔離級別,在可重複讀中,該sql第一次讀取到數據後,就將這些數據加鎖,其它事務無法修改這些數據,就可以實現可重複 讀了。但這種方法卻無法鎖住insert的數據,所以當事務A先前讀取了數據,或者修改了全部數據,事務B還是可以insert數據提交,這時事務A就會 發現莫名其妙多了一條之前沒有的數據,這就是幻讀,不能通過行鎖來避免。需要Serializable隔離級別 ,讀用讀鎖,寫用寫鎖,讀鎖和寫鎖互斥,這麼做可以有效的避免幻讀、不可重複讀、髒讀等問題,但會極大的降低數據庫的併發能力。
所以說不可重複讀和幻讀最大的區別,就在於如何通過鎖機制來解決他們產生的問題。


數據庫中事務的四大特性(ACID)
(1) 原子性 ⑵ 一致性 ⑶ 隔離性 ⑷ 持久性
現在來看看MySQL數據庫爲我們提供的事物的四種隔離級別:
關於spring的事務隔離級別與數據庫的一樣,也是下面的四個,只不過多了一個default
1.Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
2.Read committed (讀已提交):可避免髒讀的發生。
3.Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
4.Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。

 以上四種隔離級別最高的是Serializable級別,最低的是Read uncommitted級別,當然級別越高,執行效率就越低。像Serializable這樣的級別,就是以鎖表的方式(類似於Java多線程中的鎖)使得其他的線程只能在鎖外等待,所以平時選用何種隔離級別應該根據實際情況。在MySQL數據庫中默認的隔離級別爲Repeatable read (可重複讀)。
  在MySQL數據庫中,支持上面四種隔離級別,默認的爲Repeatable read (可重複讀);而在Oracle數據庫中,只支持Serializable (串行化)級別和Read committed (讀已提交)這兩種級別,其中默認的爲Read committed級別

isolation(隔離)
4.查看MySQL數據庫當前事務的隔離級別 select @@tx_isolation;

5.在MySQL數據庫中設置事務的隔離 級別: set tx_isolation=’隔離級別名稱;’

6.查看mysql的事物是否是自動提交
1或者on代表啓用,0或者off代表禁用,當autocommit=0時,所有的差丶都是在一個事物中,直到顯示的執行commit提交或者rollback回滾,該事物結束,同時又開始了另一個新的事物


二:數據庫的傳播行爲:

傳播行爲分爲兩種:分爲支持事物的傳播和不支持事物的傳播
1、PROPAGATION_REQUIRED:(支持事物)如果當前沒有事務,就創建一個新事務,如果當前存在事務,就加入該事務,該設置是最常用的設置。
2、PROPAGATION_SUPPORTS:(支持事物)支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執行。‘
3、PROPAGATION_MANDATORY:(支持事物)支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就拋出異常。
4、PROPAGATION_REQUIRES_NEW:(支持事物)創建新事務,無論當前存不存在事務,都創建新事務。
5、PROPAGATION_NOT_SUPPORTED:(不支持事物)以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6、PROPAGATION_NEVER:(不支持事物)以非事務方式執行,如果當前存在事務,則拋出異常。
7、PROPAGATION_NESTED:(不支持事物)如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。
已混淆點:spring的事務是什麼?與數據庫的事務是否一樣
本質上其實是同一個概念,spring的事務是對數據庫的事務的封裝,最後本質的實現還是在數據庫,假如數據庫不支持事務的話,spring的事務是沒有作用的.數據庫的事務說簡單就只有開啓,回滾和關閉,spring對數據庫事務的包裝,原理就是拿一個數據連接,根據spring的事務配置,操作這個數據連接對數據庫進行事務開啓,回滾或關閉操作

參考文章:

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