sql server 事物與鎖

http://www.cnblogs.com/knowledgesea/p/3714417.html

一、表account

CREATE TABLE [dbo].[account](
[UserID] [int] NULL,
[MoneyAccount] [decimal](10, 2) NULL
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [MoneyAccount]
GO

二、

  ---------------------方法1--------------------
  create proc Zz
  @userpost int,
  @userget int,
  @moneyaccoment decimal(10,2)
  as 
  begin tran
  update account set MoneyAccount=MoneyAccount-@moneyaccoment where UserID=@userpost
  update account set MoneyAccount=MoneyAccount+@moneyaccoment where UserID=@userget
  if(@@ERROR>0)
  begin
  rollback tran
  return 0
  end
  else
  begin
  commit tran
      return 1
  end


  ---------------------方法2--------------------
  create proc Zz2
  @userpost int,
  @userget int,
  @moneyaccoment decimal(10,2)
  as 
  begin tran
  begin try
  update account set MoneyAccount=MoneyAccount-@moneyaccoment where UserID=@userpost
  update account set MoneyAccount=MoneyAccount+@moneyaccoment where UserID=@userget
  end try
  begin catch
      select Error_number() as ErrorNumber,  --錯誤代碼
             Error_severity() as ErrorSeverity,  --錯誤嚴重級別,級別小於10 try catch 捕獲不到
             Error_state() as ErrorState ,  --錯誤狀態碼
             Error_Procedure() as ErrorProcedure , --出現錯誤的存儲過程或觸發器的名稱。
             Error_line() as ErrorLine,  --發生錯誤的行號
             Error_message() as ErrorMessage  --錯誤的具體信息
if (@@trancount>0)
rollback tran
  end catch
  if(@@trancount>0)------大於零說明事務已經開啓
   commit tran
   go

exec Zz 1,3,33333.66

三、鎖

1.分獨佔鎖,共享鎖和更新鎖

鎖模式 描述

共享 (S) 用於不更改或不更新數據的操作(只讀操作),如 SELECT 語句。

更新 (U) 用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。

排它 (X) 用於數據修改操作,例如 INSERT、UPDATE 或 DELETE。確保不會同時同一資源進行多重更新。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章