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。確保不會同時同一資源進行多重更新。