Sql server中的事務處理功能:為了保證數據庫的完整性。
事務(transaction):是將多個修改語句組合在一起的方法,這個方法中的所有語句只有全部執行才能正確完成功能。即要么全部執行,要么全部不執行。
事務的acid特性:
原子性:事務處理語句是一個整體,不可分割。Atomicity--A
一致性:事務處理前后數據庫前后狀態要一致。Consistency--C
分割性:多個事務並發處理互不干擾。Isolation--I
持久性:事務處理完成后,數據庫的變化將不會再改變。Durability--D
開始事務:begin tran[saction]
顯式開始事務:begin tran[action] tranaction_name
隱式開始事務:在執行insert、update、delete任何一條語句時自動執行的事務。
開啟隱式事務應先執行set inpliclt_transactions on語句
關閉隱式事務需執行set inpliclt_transactions off語句
撤銷事務:rollback tran[saction]
撤銷事務語句被執行后整個事務處理將會被終止,事務處理中的所有操作將被忽略。
提交事務:commit tran[saction]
事務被提交后,將會將修改后的數據更新到數據庫中。
根據全局變量@@error判斷結果執行rollback tran和commit tran:
在事務的處理過程中,根據條件判斷的結果執行取消或者提交事務,保證數據的正確性和完整性。
@@error全局變量會記錄語句執行過程中的最后一條錯誤信息,如果有錯誤,則變量值為1,否則為0。
Begin tran transaction_try
Declare @insert_tran,@update_tran
Insert…..
Select @insert_tran=@@error
Update……
Select @update_tran=@@error
If @insert_tran=0 and @update_tran=0
Begin
…rollback tran
End
設置和撤銷事務的保存點:
事務處理過程中,不撤銷所有的操作而設置合適的保存點,提交從begin tran到保存點之間的修改語句。
設置保存點:save tran savepoint_name
撤銷保存點:rollback tran savepoint_name
舉例實驗一下:
1.先從student表中查詢一下所有的記錄
select * from student
查詢結果截圖:

Student表中的數據記錄
2.事務中加入判斷和設置斷點
Begin tran tran_a
Insert into student values('5','孫七','男','計算機')
Begin
If @@error<>0
Rollback tran
end
Save tran save1
Insert into student values('1','孫七','男','計算機')
Begin
If @@error<>0
rollback tran save1
end
commit tran
效果截圖:

使用@@error判斷處理事務並設置事務保存點。
3.再次查詢student表記錄
select * from student
查詢結果截圖:

數據表查詢結果
結果說明:此事務中設置的保存點成功,第一條數據插入成功,執行了事務中的部分語句。
第二條數據插入是不合法的,但是返回到了保存點位置,並非完全不執行事務中的語句。