嵌套事务和事务保存点的错误处理

嵌套事务和事务保存点的错误处理

对于嵌套事务。
1.外部起事务,内部起事务,内外都有Try Catch
内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。
外部出错:如果外部事物出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。
注:如果内部的事务不起事务名称,内部如果出错,将会回滚掉会话中的全部事务,而且报异常。

2.外部起事务,内部起事务,内部没有Try Catch
内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。
外部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。

3.外部起事务,内部不起事务,但有Try Catch。
内部出错:外部事物正常提交,外部事物不会进入ROLLBACK,内部出错之后的记录也会正常执行。内部操作中,Try部分在错误出现之前的操作正常,Try部分在操作之后的操作不执行,然后进入Catch块中执行操作。
外部出错:内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。

4.外部起事务,内部不起事务,但没有Try Catch.
内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。
外部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。

5.外部不起事务,内部起事务,但有Try Catch.
内部出错:外部操作被正常执行,内部ROLLBACK操作前全部回滚,之后的操作正常执行。
外部出错:出错操作之前的操作不会回滚,出错之后的操作不执行,跳入Catch块中,内部事务不会回滚。

6.外部不起事务,内部起事务,但没有Try Catch.
内部出错:外部操作被正常执行,内部ROLLBACK操作前全部回滚。由于没有catch块,所以外部操作全部执行。
外部出错:内部事务正常提交,外部只有当条记录失败,其他操作正常执行,但是有严重错误报出来。

对于事务保存点
事务保存点只有SAVE和ROLLBACK操作,当外部调用内部保存点,内部出现问题不影响外部事务,外部操作正常执行。当外部操作出现问题时,内部所有操作都回滚掉。

如:外部起事务,内部起保存点,内外都有Try Catch
内部出错:外部操作正常,不进入Catch,内部事务回滚到保存点,之后的继续执行。
外部出错:如果外部事物在保存点之前出现异常,那么外部和内部所有操作回滚。如果外部事物在保存点之前出现异常,由于保存点已经提交了事务,导致外部rollback找不到对应的事务点。

时间: 2024-08-03 21:29:57

嵌套事务和事务保存点的错误处理的相关文章

SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题

转自  :SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题 问题: 1. System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配.上一计数 = 1,当前计数 = 0. 2. EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配.上一计数 = 0,当前计数 = 1. 后面的内容,是我之前

服务器端二次开发标准事务保存数据

二次开发中,常常会调用平台事务保存数据,今天整理了标准格式的度量平台数据保存或SQL执行语句,格式如下:             //获取要保存数据表的表结构             Table table1 = service.GetTableStruct("default", "DELIT_TASK_LIST");             Table table2 = service.GetTableStruct("default", &qu

解决win7打印机共享出现“无法保存打印机设置(错误0x000006d9)的问题

最新解决win7打印机共享出现“无法保存打印机设置(错误0x000006d9)的问题,由系统下载吧率先分享: 有些用户在使用Windows7系统过程中,碰到到win7打印机共享出现“无法保存打印机设置.操作无法完成(错误0x000006d9)”的提示,这是怎么回事呢?其实出现这种故障,是因为windows firewall服务未开启的原因,要想解决win7打印机共享出现“无法保存打印机设置(错误0x000006d9)的问题,那么就需开启该服务.下面小编介绍开启windows firewall服务

9-04嵌套事务及事务分类(1)

全局变量@@TRANCOUNT: 返回当前连接的活动事务数. 显式事务: 用BEGIN  TRANSACTION明确实事务的开始. 最常用的事务类型. 隐性事务: 通过设置SETIMPLICIT_TRANSACTIONS ON语句, 将隐形事务模式设为打开. 其后的T-SQL语句自动启动一个新事务. 提交或回滚一个事务,下一个T-SQL语句又会启动一个新事务. 自动提交事务: SQL Sever的默认模式. 每一个单独的T-SQL语句为一个事务. --COMMIT对事务数的影响(使用了嵌套事务)

JDBC事务保存点(setSavepoint, releaseSavepoint )实例

以下是使用事务教程中描述的setSavepoint和回滚的代码示例. 此示例代码是基于前面章节中完成的环境和数据库设置编写的. 复制并将以下示例代码保存到:JDBCSavepoint.java 中,编译并运行如下 - //STEP 1. Import required packages // See more detail at http://www.yiibai.com/jdbc/ import java.sql.*; public class JDBCSavepoint { // JDBC

使用navicat构建数据库时,varchar的默认值保存报1064错误

原因在网上查了一下,有说默认值使用了mysql关键字问题的,也有说字符集问题的,但都不是. 我的问题很简单,设置默认值时一定要用单引号或者双引号把默认值包起来..口可口可,真他妈弱智的错误啊.

win7无法保存打印机设置(错误0x000006d9)解决方法

安装了GHOST版WIN7,在设置打印机共享时,会提示(错误0x000006d9),无法设置打印机共享. 1.右击桌面"计算机"图标,弹出快捷菜单中点击"管理"命令项 2.弹出"计算机管理"窗口,窗格中点击左侧"服务",右侧服务列表中双击"Windows Firewall"服务 3.弹出"Windows Firewall"服务属性设置窗口,在"启动类型"选择"

在编译php事务时候出现如下错误,具体原因不知,不过解决了

在make的时候出现如下错误 libtool: link: `ext/date/lib/parse_date.lo' is not a valid libtool objectmake: *** [libphp5.la] Error 1 经过make  clean 之后再继续make就可以了,做个标记,下次遇到好解决

XACT_ABORT为默认为off事务发生约束性错误会继续运行,为on发生约束性错误时会rollback

本文整理于2012-4 IF OBJECT_ID(N't2', N'U') IS NOT NULL DROP TABLE t2;GOIF OBJECT_ID(N't1', N'U') IS NOT NULL DROP TABLE t1;GOCREATE TABLE t1 (a INT NOT NULL PRIMARY KEY);CREATE TABLE t2 (a INT NOT NULL REFERENCES t1(a));GOINSERT INTO t1 VALUES (1);INSERT