一. 簡介
1. 什么是事務
事務(Transaction)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元。
2. 事務的特征
事務具有 4 個基本特征,分別是:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Duration),簡稱:ACID。
(1).原子性:指事務必須是一個原子的操作序列單元。事務中包含的各項操作在一次執行過程中,只允許出現兩種狀態之一。 • 全部執行成功 • 全部執行失敗,任何一項操作都會導致整個事務的失敗,同時其它已經被執行的操作都將被撤銷並回滾,只有所有的操作全部成功,整個事務才算是成功完成.
(2).一致性:事務的一致性是指事務的執行不能破壞數據庫數據的完整性和一致性,一個事務在執行之前和執行之后,數據庫都必須處以一致性狀態。比如:如果從 A 賬戶轉賬到 B 賬戶,不可能因為 A 賬戶扣了錢,而 B 賬戶沒有加錢,無論 A 和 B 怎么轉賬,系統中總額是固定的,不可能因為 A 和 B 轉賬導致系統總額缺斤少兩。
(3).隔離性:指在並發環境中,並發的事務是互相隔離的,一個事務的執行不能被其它事務干擾。也就是說,不同的事務並發操作相同的數據時,每個事務都有各自完整的數據空間。一個事務內部的操作及使用的數據對其它並發事務是隔離的,並發執行的各個事務是不能互相干擾的。(詳見下面隔離級別)
(4).持久性:事務的持久性是指事務一旦提交后,數據庫中的數據必須被永久的保存下來。即使服務器系統崩潰或服務器宕機等故障。只要數據庫重新啟動,那么一定能夠將其恢復到事務成功結束后的狀態。
3. SQLServer中事務的寫法
--寫法1 begin transaction begin try insert into RoleInfor values('角色1','角色描述1','2020-12-05'); insert into RoleInfor values('角色1','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','2020-12-05'); --模擬錯誤,roleDescirption類型varchar(50) commit transaction end try begin catch rollback transaction end catch --寫法2 begin transaction declare @myError int; --自定義變量 set @myError=0; insert into RoleInfor values('角色1','角色描述1','2020-12-05'); set @myError=@myError+@@ERROR; insert into RoleInfor values('角色1','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','2020-12-05'); --模擬錯誤,roleDescirption類型varchar(50) set @myError=@myError+@@ERROR; if @myError>0 begin rollback transaction end else begin commit transaction end
二. 數據庫鎖、事務隔離級別、死鎖
從數據庫角度介紹各種鎖和事務隔離級別:https://www.cnblogs.com/yaopengfei/p/9762267.html (該節有點問題,復習的時候重新整理一下)
從EFCore調用的角度介紹事務隔離解蔽: https://www.cnblogs.com/yaopengfei/p/11394728.html
!
- 作 者 : Yaopengfei(姚鵬飛)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 聲 明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
- 聲 明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。