MSSQl 事务的使用

 事务具有以下四个特性:

1.原子性

   事务的原子性是指事务中包含的所有操作要么全做,要么全不做。

2.一致性

   在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态。

3.隔离性

    一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4.持久性

   一个事务一旦成功完成,它对数据库的改变必须是永久的,即便是在系统遇到故障的情况下也不会丢失。数据的重要性决定了事务持久性的重要性。

      事务最大的一个特点就是可以回滚,回滚就是回到执行操作之前的状态,只要有一个操作失败,那么事务就会回滚到操作之前的状态,例如银行转账,比如A账号给B账户转账10000元,由于计算机可能会因为停电、网络中断等原因而出现故障,所以有可能只更新B账户的金额,B账号金额多了10000块钱,而A账号金额没有减少,那银行不是亏大了吗?这时候事务的作用就体现出来了,事务可以帮助这个操作回滚到转账以前的状态,A账户金额没有减少,B账号金额也没有增多。

    下面粘一个,我近期写的一个事务吧!

create proc [dbo].[shenqing_zuof]
@i_id int,
@ReTurnValue int OUTPUT --输出参数,也就是返回值
as
declare @shijinum int,@productid int,@cangkuid int
select @shijinum=s_shijinum ,@productid=i_productid, @cangkuid=i_cangkuid from shenqing  where i_id=@i_id
begin tran  --标记事务的开始
begin 
    update shenqing set i_static=4,i_paifa=1 where i_id = @i_id
    if @@Rowcount<1
    goto Error1
    update Kucun set i_fuzhunum=i_fuzhunum+@shijinum where i_cangkuid=@cangkuid and i_productid=@productid
    if @@ROWCOUNT<1
    goto Error2
end
commit tran   --提交事务
set @ReTurnValue=1  --正确执行
return
 
Error1:
rollback
set @ReTurnValue=-1  --更新申请状态失败
return

Error2:
rollback
set @ReTurnValue=-2  --更新辅助库存失败
return

       我用到的有输出参数output,用来返回操作状态,@@Rowcount是全局变量,返回受影响的行数。当@@Rowcount<1时代表更新语句执行失败,如果失败则跳转到Error,事务回滚到操作之前的状态,并返回对应的返回值。 一般把DML语句 (select,delete,update,insert语句)放在begin tran...commit tran 之间作为一个事务处理,也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态。 


原文地址:https://www.cnblogs.com/zhangjd/p/4481475.html