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。确保不会同时同一资源进行多重更新。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值