SQL Server數據庫練習——事務

什麼是事務

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

事務模式的分類

SQL Server 以下列事務模式運行:

自動提交事務
每條單獨的語句都是一個事務。

顯式事務
每個事務均以 BEGIN TRANSACTION 語句顯式開始,以 COMMIT 或 ROLLBACK 語句顯式結束。

隱式事務
在前一個事務完成時新事務隱式啓動,但每個事務仍以 COMMIT 或 ROLLBACK 語句顯式完成。

批處理級事務
只能應用於多個活動結果集 (MARS),在 MARS 會話中啓動的 Transact-SQL 顯式或隱式事務變爲批處理級事務。 當批處理完成時沒有提交或回滾的批處理級事務自動由 SQL Server 進行回滾。

事務的使用示例

我們以一張表爲例演示事務的使用。
在這裏插入圖片描述
給Customer表的Remain字段添加一個約束。
在這裏插入圖片描述
在這裏插入圖片描述

--張三給--李四轉賬 200
select*from Customer
go
--定義一個變量,記錄錯誤數
declare @error_nums int
set @error_nums=0
--開始事務
begin transaction tran_change
begin try
  update customer set Remain=Remain-200 where id=1
  set @error_nums=@error_nums+@@error
  update customer set Remain=Remain+200 where id=2
  set @error_nums=@error_nums+@@error
end try
begin catch
    set @error_nums=@error_nums+1
	print'錯誤異常:'+convert(varchar,error_number())+',錯誤信息'+error_message()
end catch
if(@error_nums>0) --表示前面有錯
  rollback transaction tran_change --回滾事務
else
 commit transaction tran_change --執行事務

 select*from Customer

--注:
 --@@ERROR:當前一個語句遇到錯誤,則返回錯誤號,否則返回0。
 --需要注意的是@ERROR在每一條語句執行後會被立刻重置,
 --因此應該在要驗證的語句執行後檢查數值或者是將它保存到局部變量中以備將來使用。
 --沒使用事務,對的就執行,錯誤的就不執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章