事務(transaction) 是作為單個邏輯工作單元執行的一系列操作,這些操作作為一個整體一起向系統提交,要麼都執行,要麼都不執行。事務是一個不可分割的工作邏輯單元。
事務必須具備以下四個屬性:
原子性:事務是一個完整性的操作,各個操作都是不可分割的(原子),要麼都操作,要麼都不操作﹔
一致性:當事務完成之後,數據必須保持一致折狀態
隔離性:對數據進行修改的並發性事務,每個都是獨立的,互不影響。
永久性:當事務完成之後,對數據的修改將被永久保持,事務日誌能夠保持事務的永久性
使用T_SQL語句管理事務:
開始事務:begin transaction
提交事務:commit transaction
回滾(撤消)事務;rollback transaction
事務分類
顯示事務:用begin transaction明確指定事務的開始,這是最常用的事務類型
隱性事務:通過設置set implicit_transactions on 語句,將隱性事務模式設置為打開,下一個語句自動啟動一個新事務。當該事務完成時,再下一個T_SQL語句又將啟動一個新事務
自動提交事務:這是SQL_SERVER默認模式,它將每條單獨的T-SQL語句視為一個事務,如果執行,則自動提交,如果錯誤,則自動回滾
如何創建事務
begin transaction
declare @errorSum int /*定義變量,用於累計事務執行過程中的錯誤*/
set @errorSum=0 /*初始化為0*/
update bank set currentMoney=currentMoney-1000 /*轉帳:張三的帳戶少了1000無,李四的帳戶多了1000元*/
where customeName='張三'
set @errorSum=@errorSum+@@error
update bank set current Money=currentMoney+1000
where cusomerName='李四'
set @errorSum=@errorSum+@@error /*累計是否有誤*/
if @errorSum<>0 如果有錯誤
begin
print'交易失敗,回滾事務'
rollback transaction
end
else
begin
print'交易成功,提交事務,寫入硬盤,永久的保存'
commit transaction
end
go
pring '查看轉帳事務後的余額'
select * from bank
go