Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6885489
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: Sybase

2013-09-13 11:25:07

     事务模式(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会把事务回滚(对于本示例来说,会把内层事务和外层事务所的改变都回滚),所以没有记录插入。

阅读(1364) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~