Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1570291
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2013-09-12 15:10:30

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

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