黑馬程序員-SQL事務處理

----------------------Windows Phone 7手機開發.Net培訓、期待與您交流! ----------------------

事務定義:

事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所有數據更改均會

提交,成爲數據庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有

數據更改均被清除。

事務三種運行模式:
自動提交事務
每條單獨的語句都是一個事務。
顯式事務
每個事務均以 BEGIN TRANSACTION 語句顯式開始,
 COMMIT  ROLLBACK 語句顯式結束。
隱性事務
在前一個事務完成時新事務隱式啓動,但每個事務仍以 COMMIT  ROLLBACK 語句

顯式完成。

事務就是負責把一系列操作看做一個獨立的邏輯單元,這些操作要麼同時成功,要麼同時失敗。下面是一個經典的例子:
create procedure TransferMoeny
(
@FromAccountNo varchar(50),-- 轉出賬號
@ToAccountNo varchar(50),--轉入賬號
@MoneyCount money--轉賬金額
)
as
--判斷賬號是否存在
if exists (select 1 from 帳戶表 where 賬號 = @FromAccountNo)
begin
if exists (select 1 from 帳戶表 where 賬號 = @ToAccountNo)
begin
--判斷轉出金額是否大於當前餘額
if (select 當前餘額 from 帳戶表 where 賬號 = @FromAccountNo) >= @MoneyCount
begin
--開始轉賬
begin transaction
insert into [存取記錄表] ([賬號],[存取類型], [存取金額]) values(@FromAccountNo, -1,@MoneyCount)
if @@error <> 0
begin
rollback transaction--發生錯誤則回滾事務,無條件退出l
return
end
insert into [存取記錄表] ([賬號],[存取類型], [存取金額]) values(@ToAccountNo, 1,@MoneyCount)
if @@error <> 0
begin
rollback tran
return
end
commit transaction --兩條語句都完成,提交事務
end
else
raiserror ('轉賬金額不能大於該賬號的餘額',16,1)
end
else
raiserror ('轉入賬號不存在',16,1)
end
else
raiserror ('轉出賬號不存在',16,1)

---------------------- Windows Phone 7手機開發.Net培訓、期待與您交流! ----------------------


詳細請查看:http://edu.csdn.net/heima
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章