資料庫事務簡介與執行個體,資料庫事務執行個體
什麼是資料庫事務?
資料庫事務是指作為單個邏輯工作單元執行的一系列操作。具體表現為:可以將幾個sql語句作為一個整體來執行,這些sql語句當有一條執行出錯時,那麼所有的sql語句都將執行失敗。也就是這些sql語句作為一個整體,要麼全部執行成功,要麼全部執行失敗。使用事務能便於恢複資料,保證資料的一致性。
一 事務的屬性
事務具有ACID屬性
即 Atomic原子性, Consistent一致性, Isolated隔離性, Durable永久性
原子性
就是事務應作為一個工作單元,交易處理完成,所有的工作要麼都在資料庫中儲存下來,要麼完全復原,全部不保留
一致性
事務完成或者撤銷後,都應該處於一致的狀態。
隔離性
多個事務同時進行,它們之間應該互不干擾。事務查看資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態的資料。
永久性
事務提交以後,所做的工作就被永久的儲存下來
事務執行個體:
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)