資料庫事務簡介與執行個體,資料庫事務執行個體

來源:互聯網
上載者:User

資料庫事務簡介與執行個體,資料庫事務執行個體

什麼是資料庫事務?
資料庫事務是指作為單個邏輯工作單元執行的一系列操作。具體表現為:可以將幾個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)

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.