1.事務的概念
事務值得是邏輯上的一組操作,這組操作要么全部成功,要么全部失敗.
2.具體實例
1.場景-銀行轉賬
一個轉賬過程
如果A給B轉賬期間,銀行系統發生故障,就要保證A,B兩者的財產不能出現任何損失.
所以轉賬的操作就要添加到事務中進行,必須一起成功,或者一起失敗.
具體點就是,要么A給B成功轉賬,A少了3000元,B多了3000元,要么A沒有給B轉賬成功,A沒少一分錢,B沒多一分錢.
2.事務的特性
總的來講分為4類特性
原子性
一致性
隔離性
持久性
1.原子性
原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生.
具體就是上面的例子.
2.一致性
一致性指事務前后數據的完整性必須保持一致.
實例:就是說A和B轉賬操作完成之前和之后,A,B兩者的存款之和,沒有任何變化.
3.隔離性
隔離性指的是指多個用戶并發訪問數據庫時,一個用戶的事務不能被其他用戶的事務所干擾.多個并發的事務之間的數據要相互隔離.
實例:
A正在被一個事務進行更新操作,另外一個事務也進行對A對象的更新操作,這樣就導致第一個事務對A的修改,被第二個事務對A的修改給覆蓋,修改記錄被覆蓋掉了,為了避免這種情況,所以事務執行期間,必須要有隔離性.
4.持久性
持久性是指一個事務一旦被提交,他對數據庫中的修改就是永久性的
,即使數據庫發生故障也不對其出現任何影響.
3.Spring中的事務管理
Spring事務管理主要有三個接口
1. platfromTransactionManager
2. TransactionDefinition
3. TransactionStatus
1.platfromTransactionManager
Spring為不同的持久化框架提供了不同的PlatfromTransactionManager接口實現
2.TransactionDefinition
事務定義信息(隔離級別,傳播,超時,只讀)
可預見的安全性問題包括:臟讀,幻讀,不可重復讀
1.臟讀
一個事務讀取了另外一個事務改寫但沒有提交的數據,如果這些數據被回滾,則讀到的數據是無效的.
2.不可重復讀
在同一事務中,多次讀取同一數據返回的結果有所不同.
3.幻讀
一個事物讀取了幾行記錄之后,另一個事務插入一些記錄,幻讀就會產生.
再后來的查詢中,第一個事務就會發現有些原來沒有的記錄,
隔離級別:讀未提交,讀已提交,可重復讀,可串行化.
1.隔離級別的劃分(安全等級升序)
2.事務的傳播行為
主要用來解決服務器端的SERVICE&&DAO的一些問題.
圖示: