事物模式(transaction mode)定义了事物开始是否需要显示地执行”begin transaction”语句,事物的结束是否需要显示地执行”commit”或”rollback”语句。ASE数据库支持两种事物模式:链式模式(ANSI SQL标准) 和非链式模式。下面将下大家介绍这两种事物模式的有关知识:

1. 链式模式(chained mode)
    
    在这种事物模式下,用户不需要显示地执行”begin transaction”语句,当头一次执行如下SQL语句时数据库会自动开始一个事物:
         * select
         * insert
         * update
         * delete
         * open
         * fetch
         * exec
    在链式模式下,事物必须显示地发出commit或rollback语句才能结束。对于链式事物模式,当事物执行的第一个SQL语句是上面所列出的语句时,ASE会自动发出一个隐式的”begin trasaction”。

2. 非链式模式(unchained mode)
 
     “非链式模式”,又叫做”自动提交”模式。当执行完一条DML 语句之后,比如insert、update、delete,ASE会自动提交事物。如果事物运行在非链式模式下,并且事物要执行多个SQL语句的话,必须显示地执行”begin transaction”开始事物,执行”commit”或”rollback”语句以结束事物。这种事物模式是ASE中(比如isql和open client应用)事物的缺省模式。

    对于应用开发者来说,必须要知道有关事物模式的知识,这样才能正确进行选择。我们在确定事物的执行行为和结果时,一定要知道他所处的事物模式,否则将无法确定。我们看下面一组语句:

    insert into accounts(actno, balance) values (‘1111111’,3000)
    begin transaction
          update accounts  set balance = balance + 100
         where actno = ‘1111111’
    rollback transaction

   上面的一组语句如果运行在”非链式”模式下,执行结果将是accounts表中新增一条记录:账号为’1111111’,余额为3000。
   
   如果运行在”链式”模式下,那么上面这组语句的执行结果是accounts表中没有插入记录。在链式模式下,执行第一条insert语句时,ASE会自动开始一个事物;当执行语句组中的第2条语句”begin transaction”时,会开始一个嵌套子事物(这时select @@trancount显示为2);当执行语句 rollback transaction 时,ASE会把事物回滚(对于本示例来说,会把内层事物和外层事物所的改变都回滚),所以没有记录插入。

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply