指訪問並可能更新資料庫中各種資料項目的一個程式執行單元(unit)--也就是由多個sql語句組成,必須作為一個整體執行
這些sql語句作為一個整體一起向系統提交,要麼都執行、要麼都不執行
文法步驟:
開始事務:BEGIN TRANSACTION
事務提交:COMMIT TRANSACTION
交易回復:ROLLBACK TRANSACTION
判斷某條語句執行是否出錯:
全域變數@@ERROR;
@@ERROR只能判斷當前一條T-SQL語句執行是否有錯,為了判斷事務中所有T-SQL語句是否有錯,我們需要對錯誤進行累計;
例:SET @errorSum=@errorSum+@@error
如,借錢問題:
假定錢從A轉到B,至少需要兩步:
隱藏行號 複製代碼 ? 這是一段程式碼。 UPDATE bank SET uMoney = uMoney - 1000
WHERE uName= '家寶'
@@error
UPDATE bank SET uMoney = uMoney + 1000
WHERE uName= '奧巴馬'
@@error
--查看結果。
SELECT * FROM bank
CREATE TABLE bank
(
uName CHAR(10), --姓名
uMoney MONEY --當前餘額
)
GO
ALTER TABLE bank
ADD CONSTRAINT CK_nowMoney
CHECK(uMoney>=1)
GO
INSERT INTO bank(uName, uMoney)
VALUES('家寶',1000)
INSERT INTO bank(uName, uMoney)
VALUES('奧巴馬',1)
例題:
1.表category
select * from category
2.建立約束c_name名字不小於2個字
3.執行下列語句報錯
update category set c_name = '1' where c_id =1
4.寫事務
declare @errNum int
set @errNum=0
begin transaction --先開始事務
update category set c_name = '1' where c_id =1
set @errNum =@errNum +@@error
delete from Category where c_id =120
set @errNum =@errNum +@@error
if @errNum=0
begin
commit transaction
print 'OK!'
end
else
begin
rollback transaction
print 'ERROR!'
end
select * from category
執行結果:
結果:c_id=120也沒有刪除