什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事務:
事務是指程序中的一個操作序列。其特點是:該序列的所有操作要么全部成功完成,要么只要有一個操作失敗,則該序列所有操作都將被撤銷。這也是事務的原子性(要么成功,要么失敗)。
2.事務特性:
事務特性分為四個:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持續性(Durability)簡稱ACID。
3.事務的隔離級別:
事務的隔離級別也分為四種,由低到高依次分別為:read uncommited(讀未提交)、read commited(讀提交)、read repeatable(讀重復)、serializable(序列化),這四個級別可以逐個解決臟讀、不可重復讀、幻讀這幾類問題。
-
- 臟讀:指當一個事務正字訪問數據,并且對數據進行了修改,而這種數據還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。因為這個數據還沒有提交那么另外一個事務讀取到的這個數據我們稱之為臟數據。依據臟數據所做的操作肯能是不正確的。
- 不可重復讀:指在一個事務內,多次讀同一數據,得到的是不同的值。在這個事務還沒有執行結束,另外一個事務也訪問該同一數據,那么在第一個事務中的兩次讀取數據之間,由于第二個事務的修改第一個事務兩次讀到的數據可能是不一樣的,這樣就發生了在一個事物內兩次連續讀到的數據是不一樣的,這種情況被稱為是不可重復讀。
- 幻象讀:一個事務先后讀取一個范圍的記錄,但兩次讀取的紀錄數不同,我們稱之為幻象讀(兩次執行同一條 select 語句會出現不同的結果,第二次讀會增加一數據行,并沒有說這兩次執行是在同一個事務中)
spring事務傳播特性:
事務傳播行為就是多個事務方法相互調用時,事務如何在這些方法間傳播。spring支持7種事務傳播行為:
-
- propagation_requierd:如果當前沒有事務,就新建一個事務,如果已存在一個事務中,加入到這個事務中,這是最常見的選擇。
- propagation_supports:支持當前事務,如果沒有當前事務,就以非事務方法執行。
- propagation_mandatory:使用當前事務,如果沒有當前事務,就拋出異常。
- propagation_required_new:新建事務,如果當前存在事務,把當前事務掛起。
- propagation_not_supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
- propagation_never:以非事務方式執行操作,如果當前事務存在則拋出異常。
- propagation_nested:如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作
Spring 默認的事務傳播行為是 PROPAGATION_REQUIRED,它適合于絕大多數的情況。假設 ServiveX#methodX() 都工作在事務環境下(即都被 Spring 事務增強了),假設程序中存在如下的調用鏈:Service1#method1()->Service2#method2()->Service3#method3(),那么這 3 個服務類的 3 個方法通過 Spring 的事務傳播機制都工作在同一個事務中。
?
總結
以上是生活随笔為你收集整理的什么是事务、事务特性、事务隔离级别、spring事务传播特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡不良信用记录保存几年
- 下一篇: 谈谈你对闭包的理解?