數據庫事務書寫簡單DEMO(新手見解)


  因為最近在做項目時多次應用到了事務,在這里簡單舉一個數據庫事務的DEMO ,希望大家批評指正,謝謝!

  那么,廢話不多說,我們開始先從事務的介紹以及一系列知識點說起:

  

  事務(Transaction)是並發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。

  例如,銀行轉賬工作:從一個賬號扣款並使另一個賬  號增款,這兩個操作要么都執行,要么都不執行。所以,應該把它們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。

       針對上面的描述可以看出,事務的提出主要是為了解決並發情況下保持數據一致性的問題。

       事務具有以下4個基本特征。

  ●   Atomic(原子性):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要么全部成功,要么全部失敗。

  ●   Consistency(一致性):只有合法的數據可以被寫入數據庫,否則事務應該將其回滾到最初狀態。

  ●   Isolation(隔離性):事務允許多個用戶對同一個數據進行並發訪問,而不破壞數據的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。

  ●   Durability(持久性):事務結束后,事務處理的結果必須能夠得到固化。

 

  2.事務的語句  

  開始事物:begin  transaction        

  提交事物:commit  transaction         

  回滾事務:rollback  transaction       

    3.事務的4個屬性     

  ①原子性(Atomicity):事務中的所有元素作為一個整體提交或回滾,事務的個元素是不可分的,事務是一個完整操作。   

  ②一致性(Consistemcy):事物完成時,數據必須是一致的,也就是說,和事物開始之前,數據存儲中的數據處於一致狀態。保證數據的無損。   

  ③隔離性(Isolation):對數據進行修改的多個事務是彼此隔離的。這表明事務必須是獨立的,不應該以任何方式以來於或影響其他事務。   

  ④持久性(Durability):事務完成之后,它對於系統的影響是永久的,該修改即使出現系統故障也將一直保留,真實的修改了數據庫

  4.事務的保存點     

  save   transaction        保存點名稱 --自定義保存點的名稱和位置     

  rollback  transaction        保存點名稱 --回滾到自定義的保存點

 

  如果這樣還不了解,直接上個有關於充值的DEMO:

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  USE [MoneyProduct]
  GO
  /****** Object:  StoredProcedure [dbo].[Pro_InsertMoneyRecordes]    Script Date: 07/01/2016 09:32:31 ******/
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  ALTER proc [dbo].[Pro_InsertMoneyRecordes] --一個存儲過程,這個沒什么說的
  @U_Id int,@MR_money decimal,@MR_time datetime,@MR_state int,@MR_depict varchar(100),@MR_typeId int,@MR_numbers varchar(100) ,@Bid int,@Cy_Id int ,@Cy_numbers varchar   (100)
  as
  begin
 
    begin tran Tran_Money --開始事務
    DECLARE @tran_error int ;
      set @tran_error =0;
      begin try
       insert into MoneyRecord values(@U_Id,@MR_money,@MR_time,@MR_state ,cast (@MR_depict as varchar),@MR_typeId,@MR_numbers,@Bid,@Cy_Id,cast (@Cy_numbers as varchar));

    --添加充值信息
     set @tran_error =@tran_error+@@ERROR;
     --測試出錯代碼,看看充值數據是否添加成功
      --SET @tran_error = 1;
       select @@IDENTITY as 'identity';--查詢新添數據最后一行的標識列
       set @tran_error = @tran_error+@@ERROR;
       insert into CZRecord values(@@IDENTITY);--向充值記錄里添加一條信息
      set @tran_error = @tran_error+@@ERROR;
      update Capital set C_balance=C_balance+@MR_money where C_Id = (select C_Id from UserInfo where U_Id =@U_Id)--修改賬戶中心余額
      set @tran_error = @tran_error+@@ERROR;
      end try
   begin catch
      print '出現異常'+convert(varchar,error_number())+',錯誤信息'+error_message()
      set @tran_error=@tran_error+1;
   end catch
if(@tran_error>0)
   begin
     --執行出錯,回滾事務
     ROLLBACK TRAN;
     Print '充值失敗'
     end
else
  begin
    --沒有異常,提交事務
    COMMIT TRAN;
    Print '充值成功'
    end
end

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上只是自己對於事務書寫規范的認識,可能不夠全面嚴謹,希望各位指教!

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM