SqlServer事務1.0

事務的定義

事務就是被綁定在一起作爲一個邏輯工作單元的SQL語句組,如果任何一個語句操作失敗那麼整個操作就被失敗,進而回滾到操作前狀態,或者是上個節點。爲了確保要麼執行,要麼不執行,就可以使用事務。要將一組語句作爲事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

事務的使用場景

舉個例子,我們經常會使用轉賬功能,轉賬的時候,是先減去轉出自己賬戶的金額,然後再在指定轉入賬戶的金額加上轉出的金額。如果剛好這個時候轉出的操作已經執行完成,但是由於系統的故障,導致轉入的操作失敗了。那麼怎麼辦?這就需要用到事務了,只要事務裏面有一條命令未成功執行,那麼數據就會回滾到事務開始之前的狀態。

事務的特性

(1) 原子性(Atomicity):事務是一個完整的操作, 事務中所有操作命令必須作爲一個整體提交或回滾。如果事務中任何操作命令失敗,則整個事務將因失敗而回滾。

(2) 一致性(Consistency):當事務完成時,數據都處於一致狀態。

(3) 隔離性(Isolation): 對數據進行修改的所有併發事務是彼此隔離的,它不以任何方式依賴或影響其他事務。

(4) 持久性(Durability):事務提交之後,數據是永久性的,不可再回滾。

事務的語法

BEGIN TRAN 事務名    --開始事務
ROLLBACK TRAN        --回滾事務
COMMIT TRAN          --提交事務
SAVE TRAN            --事務保存點 

實例講解

實現功能張三給李四轉賬兩百
表結構
在這裏插入圖片描述
Custom表
在這裏插入圖片描述

begin Transaction tran_Charge
--定義變量記錄錯誤數
declare @err_nums int
set @err_nums=0

begin try
update Customers set Remain=Remain-200 where Name='張三'
set @err_nums=@err_nums+@@ERROR
update Customers set Remain=Remain+200 where Name='李四'
set @err_nums=@err_nums+@@ERROR
end try


begin catch
print '錯誤編號:'+convert(varchar,error_number())+'錯誤消息'+error_message()
end catch


if(@err_nums>0) --說明語句有誤
  rollback Transaction tran_Charge  --回滾事務
else
  commit Transaction tran_Charge   --提交事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章