SQL Server—數據庫事務詳解

一,什麼是事務

定義:事務是數據庫操作的最小工作單元,是作爲單個邏輯工作單元執行的一系列操作;這些操作作爲一個整體一起向系統提交,要麼都執行、要麼都不執行;事務是一組不可再分割的操作集合(工作邏輯單元)

作用:用於一些對操作過程的完整性比較高的程序。比如銀行系統,用戶在轉賬的過程中程序出現錯誤,但是這個轉賬操作沒有完成。那麼這個操作就被退回。

二,事務的四大特徵

1. 原子性
指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇博客介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。

2. 一致性
是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。

3.隔離性
當多個用戶併發訪問數據庫時,比如操作同一張表時,數據庫爲每一個用戶開啓的事務,不能被其他事務的操作所幹擾,多個併發事務之間要相互隔離。

4.持久性
指一個事務一旦被提交了,那麼對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。

三,事務的控制語句

  • BEGIN 開始一個事務
  • ROLLBACK 事務回滾
  • ROLLBACK TO identifier 把事務回滾到標記點;
  • COMMIT 提交事務
  • RELEASE SAVEPOINT identifier 刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常

四,操作實例

Customers表:
在這裏插入圖片描述
注:
Remain爲個人金額

張三轉賬200給李四

--開始事務
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()
     set @err_nums=@err_nums+1
end catch


if(@err_nums>0) --說明語句有誤
  rollback Transaction tran_Charge  --回滾事務
else
  commit Transaction tran_Charge   --提交事務
 *事務都是自動提交的,即執行 SQL 語句後就會馬上執行 COMMIT 操作。因此要顯式地開啓一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。*
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章