文档详情

事务处理3.ppt

发布:2017-05-22约3.21千字共17页下载文档
文本预览下载声明
事务处理 二、事务的特性 1、原子性 2、一致性 3、隔离性 4、持久性 三、事务的模式 自动提交事务(AutocommitTransactions) 这个模式是数据引擎的缺省模式,也是各种编程接口的事务缺省模式。每个单独的语句在完成后被提交,失败后被回滚,编程人员不需要指定任何命令。 例1 create table test (sname varchar(20) not null, sage int ) Go insert test values(abc,20) insert test(sage) values(19) insert test values(he,19) 说明: 每个单独的语句就是一个事务的单位,成功了就提交,这句语句执行错误就回滚这条语句,对其他语句的执行不产生影响。注意这里说的执行错误是运行时错误。 例2 insert test values(abc,20) insert test(sage) value(19) -- 此处为编译错误 insert test values(he,19) 如果语句本身有编译错误,比如sql语句的关键词拼写错误了,那么发生编译错误语句所在的那个批次的语句都将不被执行 2 .显式事务(Explicit Transactions) 显式事务通过sql脚本的BEGIN TRANSACTION或者编程接口(API)的开始事务语句启动事务,以sql脚本的COMMIT 或 ROLLBACK语句提交或回滚事务,编程接口(API)的提交事务或回滚事务语句结束事务。都是通过显式的命令控制事务的开始和结束。 从事务开始到事务提交或者回滚是一个完整的事务周期,事务一旦开始,结果要么是提交,要么是回滚。 ??严重错误 比如,客户端到服务端的网络中断了,或者客户的机器被关机了,数据引擎会被通知数据连接已中断,这样严重的错误数据引擎会自动在服务端回滚整个事务。 运行时错误 语句之间的“GO”命令形成的区域为命令批次。数据引擎编译和执行语句是以批次为单位的。一次编译一个批次的命令,编译完成后执行这个批次的命令。存储过程是整个被一次编译的,所以一个存储过程内不分批次,整个过程就是一个批次。 大多数情况下,在一个批次中一条语句发生运行时错误,这个语句将被中止,同时同一批次的所有后续语句也不再执行,但同一批次前面已经执行的命令依然有效。但是可以使用了try…catch捕获错误,并进行相应处理,比如执行事务回滚命令。 有一些运行时错误,比如插入了一个主键重复的记录,只中止当前出错的这条语句,后续的语句照样继续执行。这类错误也能被try…catch捕获到。 为了保证整个事务中,任何语句出现错误都回滚整个事务,最简单的方法是在事务开始前设置SET XACT_ABORT 为 ON,这个设置指示数据引擎,在一个事务中遇到一个错误后,不再执行后续的事务,并回滚整个事务。 l???????? 编译错误 遇到编译错误时,错误语句所在的批次不被执行,并不会受SET XACT_ABORT设置的影响。 3.隐式事务(Implicit Transactions) 在SET IMPLICIT_TRANSACTIONS ON命令之后的第一条语句开始,就开始一个新的事务,直到遇到COMMIT 或 ROLLBACK语句结束这个事务,下一个语句又是一个新的事务,同样直到遇到COMMIT 或 ROLLBACK语句结束这个事务。这样形成了一个事务链,直到SET IMPLICIT_TRANSACTIONS OFF结束隐式事务,回到默认的自动提交事务模式 四. 事务的编程 数据库的编程有两种方式,一种应用程序接口(API),包括ODBC、ADO 、ado.net等等编程接口,一种是Transact-SQL脚本,典型的是存储过程。 2.1.Transact-SQL脚本 BEGIN TRANSACTION 标记显式连接事务的起始点。 COMMIT TRANSACTION 或 COMMIT WORK 如果没有遇到错误,可使用该语句成功地结束事务。该事务中的所有数据修改在数据库中都将永久有效。事务占用的资源将被释放。 ROLLBACK TRANSACTION 或 ROLLBACK WORK 用来回滚遇到错误的事务。该事务修改的所有数据都返回到事务开始时的状态。事务占用的资源将被释放。 2.2.ADO.NET应用程序接口 对 SqlConnection 对象使用 BeginTransaction 方法可以启动一个显式事务。若要结束事务,可以对 SqlTransaction 对象调用 Commit() 或 Rollback() 方法。 事务有起点,即通过BEGIN TRANSACTION启动一个事务,其后执行事务中的各个语句,
显示全部
相似文档