事务知识
事務管理是企業級應用程序開發中必不可少的技術,用來確保一組操作的時候?????? 數據的完整性和一致性
技術委員? 沒錢了?? 班長----2000????? 班長? ---?? 賺錢???????? (1:從班長的卡里扣錢??? 2:給技術組長的卡里增錢)
?????????2000?????????????? 10
?????????
例如去銀行存款轉賬張三給李四轉錢,這個過程就是我們所說的一個事物
一個完整的事物需要滿足以下的特性
?原子性(atomicity):事務的原子性確保動作要么全部完成,要么完全不起作用
?一致性(consistency):一旦所有事務動作完成,事務就被提交。也就是說要么都成功,要么都不成功
?隔離性(isolation):多個事物同時處理一個數據的時候,每個事物都應該與其他事務隔離開來,防止數據損壞
?持久性(durability):一旦事務完成,無論發生什么系統錯誤,它的結果都不應該受到影響。應該被持久化到數據庫中
這就是事務的四個關鍵屬性(ACID)
?
Spring既支持編程式事務管理,也支持聲明式的事務管理
1:編程式事務管理:將事務管理代碼嵌入到業務方法中來控制事務的提交和回滾,在編程式事務中,必須在每個業務操作中包含額外的事務管理代碼
2:聲明式事務管理:大多數情況下比編程式事務管理更好用。它將事務管理代碼從業務方法中分離出來,以聲明的方式來實現事務管理。事務管理作為一種橫切關注點,可以通過AOP方法模塊化。Spring通過Spring AOP框架支持聲明式事務管理。
?
我們需要首先來解釋兩個比較專業的概念,事物的傳播行為和事物的隔離特性
spring事務的傳播行為說的是當一個方法調用另一個方法時,事務該如何操作。
spring中常用的的事物類型有著些
service
public int addUser(){
?userDao.addUser();
}
1:REQUERED--------------PROPAGATION_REQUIRED
?支持當前事務,如果沒有事物則新建事物----最常用
2:SUPPORTS
?支持當前事務,如果沒有事物,則以非事物的模式進行
3:MANDATORY
?支持當前事務,如果當前沒有事物,則拋出異常
4:REQUIRES-NEW
?新建一個事物,如果當前存在事物,則將當前事務掛起
5:NOT-SUPPORTED
?以非事物的方式進行,如果當前有事物則將事物掛起
6:NEVER
?以非事物的方式進行,如果有事物則掛起
7:NESTED
?如果當前存在事物,則嵌套在事物內進行,如果當前沒有事物,則和1的方式一樣
解釋幾個非常重要的概念
1:臟讀就是指當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問 這個數據,然后使用了這個數據。
?張三原來有3000塊錢,又存款2000(這個時間比較長)。同一時間,張三老婆看到的張三卡里的錢還是只有3000,取款了2800,張三悲劇了,著就是臟讀
2. 不可重復讀 :是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據---并且修改。那么,在第一個事務中的兩 次讀數據之間,由于第二個事務的修改,那么第一個事務兩次讀到的的數據可能是不一樣的
3. 幻讀 : 是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。 同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那么,以后就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象 發生了幻覺一樣
?
spring的事務隔離級別
ISOLATION_DEFAULT:使用數據庫默認的隔離級別。
?
ISOLATION_READ_UNCOMMITTED:允許讀取改變了的還未提交的數據,可能導致臟讀、不可重復讀和幻讀。
??是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數據。
ISOLATION_READ_COMMITTED:允許并發事務提交之后讀取,可以避免臟讀,可能導致重復讀和幻讀。
?? 保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據
ISOLATION_REPEATABLE_READ:對相同字段的多次讀取結果一致,可導致幻讀。
??? 它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重復讀)。
ISOLATION_SERIALIZABLE:完全服從ACID的原則,確保不發生臟讀、不可重復讀和幻讀。
? 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止臟讀,不可重復讀外,還避免了幻像讀。
?
轉載于:https://www.cnblogs.com/wo541362927/p/5839524.html
總結
- 上一篇: (计算机组成原理)第二章数据的表示和运算
- 下一篇: 算法编程题的心得体会