事務管理
事務(Transaction):
1、構成單一邏輯工作單元的操作集合
DBMS中的用戶程序
DBMS外的可執行程序
對數據庫的讀/寫操作序列
2、讀
從數據庫中讀取數據,首先從磁盤中讀到內存(Buffer Pool),然后賦給變量。
3、寫
先完成內存中的數據復制,然后寫入磁盤。
事務的特性-ACID:
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
持久性(Durability)
事務的特性-原子性:
事務中的操作,要么全做成,要么都不做
事務是不可拆分的
事務必須以 Commit/Rollback 結束
事務的特性-一致性:
單獨運行的事務,必須保證保持數據庫的一致狀態
從一個一致狀態遷移到另一個一致狀態
與原子性相關
事務的特性-隔離性:
多個並發事務之間不能相互干擾
並發不影響事務的執行
事務的特性-持久性:
一旦事務成功完成(Commit),它對數據庫的更新應該是持久的
即使在寫入磁盤之前,系統發生故障
在下次啟動之后,也應保障數據更新的有效
事務及事務管理器:
恢復和並發控制是事務管理的重要組成部分
恢復管理部件負責保證事務的原子性與持久性
並發控制部件負責事務的並發控制機制,實現事務的隔離性與一致性
事務管理器實現事務的ACID
事務的提交與回滾:
提交( Commit
通知事務管理器一個邏輯工作單元已完成,所做的更新操作可以被提交或永久保留
表明事務成功地結束
執行有效性檢驗
回滾( RollBack)
通知事務管理器事務未能正常完成,數據庫可能處於不一致狀態,當前事務所做的所有更新操作必須撤消
表明事務不成功地結束
事務的狀態:
活動狀態(Active),初始狀態,事務正在執行時處於此狀態
部分提交狀態,事務的最后一條語句被執行后
失敗狀態,發現正常的操作不能繼續后
中止狀態,事務回滾且數據庫已恢復到事務開始時的狀態
重啟事務——不是由於內部邏輯錯誤導致的故障
殺死事務
提交狀態,事務成功完成
事務的並發:
多個事務可能同時(交叉地)在系統中運行
提高處理器、磁盤的利用率
減少等待時間
多個事務並發運行,由事務管理器進行調度
可串行化調度
並發運行的結果,與事務按某一順序串行運行的結果等同
- PROPAGATION_REQUIRED
Spring默認的傳播機制,能滿足絕大部分業務需求,如果外層有事務,則當前事務加入到外層事務,一塊提交,一塊回滾。如果外層沒有事務,新建一個事務執行 - PROPAGATION_REQUES_NEW
該事務傳播機制是每次都會新開啟一個事務,同時把外層事務掛起,當當前事務執行完畢,恢復上層事務的執行。如果外層沒有事務,執行當前新開啟的事務即可 - PROPAGATION_SUPPORT
如果外層有事務,則加入外層事務,如果外層沒有事務,則直接使用非事務方式執行。完全依賴外層的事務 - PROPAGATION_NOT_SUPPORT
該傳播機制不支持事務,如果外層存在事務則掛起,執行完當前代碼,則恢復外層事務,無論是否異常都不會回滾當前的代碼 - PROPAGATION_NEVER
該傳播機制不支持外層事務,即如果外層有事務就拋出異常 - PROPAGATION_MANDATORY
與NEVER相反,如果外層沒有事務,則拋出異常 - PROPAGATION_NESTED
該傳播機制的特點是可以保存狀態保存點,當前事務回滾到某一個點,從而避免所有的嵌套事務都回滾,即各自回滾各自的,如果子事務沒有把異常吃掉,基本還是會引起全部回滾的。