• 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之前的状态。 

    
    
  • 相关阅读:
    centos6.5+mono+nginx跑asp.net
    YYHS-手机信号
    NOIP2017提高组初赛
    BZOJ-4915-简单的数字题
    BZOJ-5055-膜法师(离散化+树状数组)
    YYHS-Super Big Stupid Cross(二分+扫描线+平衡树)
    BZOJ-1008-[HNOI2008]越狱(快速幂)
    BZOJ-1192-[HNOI2006]鬼谷子的钱袋
    POJ-2417-Discrete Logging(BSGS)
    BZOJ-1010-[HNOI2008]玩具装箱toy(斜率优化)
  • 原文地址:https://www.cnblogs.com/zhangjd/p/4481475.html
Copyright © 2020-2023  润新知