zoukankan      html  css  js  c++  java
  • Sybase 事务和嵌套事务

    全局变量@@translate 跟踪事务当前状况。Adaptive Server 通过跟踪 在语句执行之后发生的所有事务更改来确定要返回的状态。

    事务正在进行。事务有效;已成功执行了前一语句。

    image

    事务已经成功。事务已完成且已提交其更改。

    image

    语句已中止。前一语句已中止;对事务无影响。

    image

    事务已中止。事务已中止且已回退任何更改。

    image

    以下两个例子

    begin transaction
    insert into publishers (pub_id) values ("9999") (1 row affected)
    select @@transtate
    ----------
    0
    
    (1 row affected)
    commit transaction select @@transtate
    ----------
    1
    
    (1 row affected)
    
    以下示例在 insert 不成功之后 (由于规则冲突)和事务回退之后检查
    @@transtatebegin transaction
    insert into publishers (pub_id) values ("7777")
    Msg 552, Level 16, State 1:
    A column insert or update conflicts with a rule bound to the column.The command is aborted.The conflict occured in database ’pubs2’, table ’publishers’, rule ’pub_idrule’, column ’pub_id’.
    select @@transtate
    ----------
    2
    
    (1 row affected)
    rollback transaction select @@transtate
    ----------
    3
    
    (1 row affected)
    Adaptive Server 只有在响应事务采取的操作时才会更改 @@transtate。 语法和编译错误不会影响 @@transtate 的值。

    嵌套事务

    可以在其它事务中嵌套事务。当嵌套 begin transaction 和 commit transaction 语句时,实际上由最外层对语句开始并提交事务。内部的语句对只跟踪 嵌套级别。Adaptive Server 直到发出与最外层 begin transaction 相匹配的 commit transaction 时才提交此事务。通常,当包含 begin commit 语句对的 存储过程或触发器相互调用时,才发生这种事务 “嵌套”。

    @@trancount 全局变量可跟踪事务的当前嵌套级别。 begin transaction 最 初隐式或显式地将 @@trancount 设置为 1。每个后续 begin transaction 将

    @@trancount 递增,而 commit transaction 将其递减。触发一个触发器也 将使 @@trancount 递增,并且可用一个可以触发触发器的语句来开始事 务。除非 @@trancount 等于 0,否则不会提交嵌套事务。

    例如,以下嵌套语句组直到最后的 commit transaction,才由 Adaptive Server 提交该事务:

    begin tran
    
        select @@trancount
    
        /* @@trancount = 1 */ 
        begin tran
    
        select @@trancount
    
        /* @@trancount = 2 */ 
            begin tran
    
            select @@trancount
    
            /* @@trancount = 3 */ 
             commit tran
    
         commit tran 
    commit tran
    
    select @@trancount
    
    /* @@ trancount = 0 */                

    如果在嵌套 rollback transaction 语句时不包括事务名或保存点名,则将回 退到最外层的 begin transaction 语句并取消该事务。

  • 相关阅读:
    java基础02标识符
    java基础08自增、自减运算符 初识Math
    java基础04 数据类型扩展及面试题讲解
    java基础03数据类型
    大家好,近期学习设计模式,我会把自己的例子上传,以供大家参考
    关于寂寞
    从以文件流的形式下载文件
    大家好,我的程序博客开始了
    如何学好C语言
    大学生如何将自己从迷茫中解困
  • 原文地址:https://www.cnblogs.com/xiaohengheng/p/6566016.html
Copyright © 2011-2022 走看看