zoukankan      html  css  js  c++  java
  • SQL事务回滚

    BEGIN TRAN 标记事务开始
    
    COMMIT TRAN 提交事务
    
    一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理
    
    也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态。
    
    联机帮助:当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 
    当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。

    1、回滚语句1:
    SET XACT_ABORT OFF
    
    BEGIN TRAN
    
         INSERT INTO score   VALUES (101,90)
    
         INSERT INTO score VALUES (102,78)
    
            INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
    
         INSERT INTO score VALUES (103,81)
    
         INSERT INTO score VALUES (104,65)
    
    COMMIT TRAN
    
    go
    

    结果1:只回滚错误行,语句还继续执行。

    --select * from score
    
    101     90
    
    102     78
    
    103     81
    
    104     65


    2、回滚语句2:

    SET XACT_ABORT on
    
    BEGIN TRAN
    
         INSERT INTO score   VALUES (101,90)
    
         INSERT INTO score VALUES (102,78)
    
            INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
    
         INSERT INTO score VALUES (103,81)
    
         INSERT INTO score VALUES (104,65)
    
    COMMIT TRAN
    
    go
    

     结果2:事务终止并全部回滚,结果为空。

    
    --select * from score


    3、回滚语句3:
    
    事务在错误行终止,错误行回滚,错误行之前的不回滚

    SET XACT_ABORT on
    
    BEGIN
    
    INSERT INTO score   VALUES (101,90)
    
         INSERT INTO score VALUES (102,78)
    
            INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
    
         INSERT INTO score VALUES (103,81)
    
         INSERT INTO score VALUES (104,65)
    
    END
    
    go
    

     结果3:出现这种是因为系统把每个insert语句都看成是单独的事务,所以错误行以前的是不回滚的。

    
    --select * from score
    
    101     90
    
    102     78


    摘自 https://www.cnblogs.com/caoyinglai/p/3624529.html


     
  • 相关阅读:
    使用Git进行代码管理的心得
    软件工程的实践项目的自我目标
    第五次作业——团队项目——需求规格说明书
    第三次作业——结对编程
    第六次作业——团队作业
    调研Android平台的开发环境的发展演变
    第四次作业——个人作业——软件案例分析
    IT人士 不能一辈子靠技术生存
    Launchy、FARR、AutoHotKey哪个快速启动软件好?
    申请了好几次,终于通过了!庆祝一下!
  • 原文地址:https://www.cnblogs.com/xinruyi/p/11079945.html
Copyright © 2011-2022 走看看