首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java 事务嵌套_Java事务以及嵌套事务

最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。...结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest...结论:如果事务存在异常,并进行捕获处理,不会影响事务。...4.3 场景:嵌套不同事务 a)事务嵌套,在不同事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public...结论:不同事务中,嵌套的事务,没有对异常进行处理,都不会执行成功。(其实在外部事务中出错,两个也是都不会插入成功数据。)

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

事务

所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。...《MySQL 技术内幕:InnoDB 存储引擎(第 2 版)》7.7 章这样写到: InnoDB 存储引擎提供了对 XA 事务的支持,并通过 XA 事务来支持分布式事务的实现。...分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。...全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。...解决幻读的方式主要有以下几种: 将事务隔离级别调整为 SERIALIZABLE 。 在可重复读的事务级别下,给事务操作的这张表添加表锁。

50920

事务

1.事务处理 1.事务的概念 事务是针对数据库的一组操作, 它可以由-一条或多条SQL语句组成。 2.事务的基本操作 在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。...COMMIT; 如果不想提交当前事务,可以取消事务(即回滚)。 ROLLBACK; 事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。...MySQL中的事务必须满足A、C、I、D这4个基本特性。 Atomicity: 原子性 一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。...Isolation: 隔离性 隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。...为了保证这些事务之间不受影响,对事务设置隔离级是十分必要的。

50230

事务及分布式事务

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。 这些操作要么都做,要么都不做,是一个不可分割的工作单位。 本地事务 本地事务要求符合ACID的特性: 1....Mysql的undo log记录了事务修改操作之前的数据,用于在当前事务发生回滚的时候,使该条数据状态恢复到事务开始前的状态。 2....Mysql中的Innodb引擎支持事务,有4个隔离级别: 读-未提交 读-未提交是说一个事务(假设A)可以读到其他事务(假设B)尚未提交的数据。...是一种无锁并发控制,原理是通过为事务分配单项增长的事务ID,并为每行数据保存一个版本链,版本链上的数据与修改它的事务ID相关联。...一部分是把大事务拆分为若干个小事务,将整个分布式事务T分解为n个子事务,我们命名T1,T2,...,Ti,...,Tn。每个子事务都应该、或者能被看做是原子行为。

1.4K20

分布式事务之Spring事务与JMS事务(二)

Spring事务 Spring事务机制主要包括声明式事务和编程式事务,声明式事务让我们从复杂的事务处理中得到解脱,编程式事务在实际开发中得不到广泛使用,仅供学习参考。...事务抽象 spring的事务管理提供了统一的API接口支持不同的资源,提供声明式事务管企且方便与Spring框架集成。...Spring在TransactionDefinition接口中规定了 7 种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型: 事务传播行为类型 说明...PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。...PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

1.8K10

Spring | 事务原理与实践 - 声明式事务及编程式事务

通过正确的事务管理,我们可以在事务执行和结束时满足这些约束,从而确保数据的完整性。1.2.3 事务的隔离级别事务的隔离级别定义了一个事务可能会受到其他并发事务的影响程度。...3.2.1 嵌套事务嵌套事务中,主事务包含多个子事务,每个子事务都可以单独提交和回滚。如果主事务失败,所有子事务都会回滚。...Spring定义了7种传播行为:REQUIRED:支持当前事务,如果没有事务则创建新事务。SUPPORTS:支持当前事务,如果没有事务则以非事务方式执行。...MANDATORY:支持当前事务,如果没有事务则抛出异常。REQUIRES_NEW:创建新事务,如果有当前事务,则将当前事务挂起。...NOT_SUPPORTED:以非事务方式执行,如果有当前事务,则将当前事务挂起。NEVER:以非事务方式执行,如果存在事务则抛出异常。

903112

【Redis】Redis 事务事务

一个队列中,一次性、顺序性、排他性的执行一系列命令 二、事务基本指令 multi:设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中 exec:设定事务的结束位置,同时执行事务,与multi...discard使multi失效,放弃当前任务队列,中止事务 三、事务的工作流程 set执行流程:  正常执行,返回执行结果 multi执行流程:  创建事务队列后返回ok 创建事务后,set执行流程...:  将set指令放入事务队列 创建事务后,del执行流程:  将del指令放入事务队列 创建事务后,exec执行流程:  顺序执行事务队列中的指令,并销毁队列 创建事务后,discard执行流程...:  放弃执行队列中的指令,直接销毁队列,返回执行结果 四、事务中指令出错处理 开启事务后,如果放入队列的指令存在语法错误,将会执行discard,当前事务队列会被销毁 开启事务后,如果放入队列的指令并没有语法错误...客户端B修改客户端A监视的age 客户端A执行exec,执行失败,此时事务也不存在了 逻辑上,我们应该先监视数据,然后开启事务准备操作,所以不允许先multi开启事务后watch 2.

13020

saga分布式事务_本地事务和分布式事务

,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。...1、第一阶段:准备阶段 由事务协调者询问通知各个事务参与者,是否准备好了执行事务,具体流程图如下: ① 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复 ② 各参与者执行本地事务操作,...四、Saga事务: 1、什么是Saga事务: Saga 事务核心思想是将长事务拆分为多个本地短事务并依次正常提交,如果所有短事务均执行成功,那么分布式事务提交;如果出现某个参与者执行本地事务失败...事务主动发起方需要额外新建事务消息表,并在本地事务中完成业务处理和记录事务消息,并轮询事务消息表的数据发送事务消息,事务被动方基于消息中间件消费事务消息表中的事务。...如果是业务上处理失败,事务被动方可以发消息给事务主动方回滚事务 如果事务被动方已经消费了消息,事务主动方需要回滚事务的话,需要发消息通知事务主动方进行回滚事务

2.3K30

Spring事务事务传播机制(1)

Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。 一、为什么需要事务?...二、Spring 中事务的实现 Spring 中的事务操作分为两类: 编程式事务(手动写代码操作事务)。 声明式事务(利用注解自动开启和提交事务)。...1、MySQL 中的事务使用 事务在 MySQL 有 3 个重要的操作:开启事务、提交事务、回滚事务,它们对应的操作命令如下: -- 开启事务 start transaction; -- 业务执行 --...提交事务 commit; 回滚事务 rollback; 2、Spring 编程式事务(了解) Spring 手动操作事务和上面MySQL 操作事务类似,它也是有 3 个重要操作步骤: 开启事务(获取事务...提交事务。 回滚事务

17040

JDBC事务事务隔离级别详解

isolation(隔离性)     事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。...它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。...由以上的实验可以得出结论,可重复读隔离级别只允许读取已提交记录,而且在一个事务两次读取一个记录期间,其他事务部的更新该记录。但该事务不要求与其他事务可串行化。...(四)、将A的隔离级别设置为 可串行化 (Serializable) A端打开事务,B端插入一条记录 事务A端: ? 事务B端: ?...因为此时事务A的隔离级别设置为serializable,开始事务后,并没有提交,所以事务B只能等待。 事务A提交事务事务A端: ? 事务B端: ?

75410

事务管理的方式&事务隔离级别&事务的传播行为

一 Spring 管理事务的方式有几种 编程式事务,在代码中硬编码。...(不推荐使用) 声明式事务,在配置文件中配置(推荐使用) 声明式事务又分为两种: 基于XML的声明式事务 基于注解的声明式事务 二 2 Spring 事务中的隔离级别有哪几种?...所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。...三 Spring 支持哪些事务传播行为,分别是啥样的?...关于最后一个嵌套事务这里以A事务方法调B事务举个例子 A开启一个事务 执行方法A里的一些代码,doSomethingPre() 调用B方法,设置一个回滚点,savepointe 执行方法B里的一些代码

49600

单机事务(-)

写-》读-》写-》写:事务单元1 读-》读-》写-》写:事务单元2/事务单元3 共享资源A 3.继续优化对存在共享同一资源的对列,引入读锁,读并行。 引入读锁,提高并发,合并读,但会阻塞写。...读-》写-》写:事务单元2/事务单元3 共享资源A 读 4.继续提高并发,因为之前读会阻塞写,那么引入写锁,读写并行。...写-》读-》写-》写:事务单元2/事务单元3 共享资源A 读 当需要写的时候会把读锁升级为写锁。...这就是mvcc机制 会引入版本号:oracle scn,innodb trx_id,如果发生读,那么《读事务》读到的《数据版本号》一定是《读事务的版本号》之前。...写-》写-》写:事务单元1 读 读-》写-》写:事务单元2/事务单元3 共享资源A 读 读 6.继续提高并发,写写并行 悲观锁和乐观锁的机制来提高写写并行。

51740

Redis事务

一.使用Redis-Cli执行事务   1.概念 和其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。...在Redis中,MULIT,EXEC,DISCARD,WATCH这个四个命令是实现事务的基石,Redis中事务的实现特征     1.在事务中的所有命令都将被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务...,从而保证了事务中的所有命令被原子的执行     2.和关系型数据库中事务相比,在Redis事务中如果由某一条命令执行失败,其后的命令仍然会被继续执行     3.可以通过MULTI命令开启一个事务,其可以理解为关系性数据库中的...原子性的返回事务中各条命令的返回结果。如果在事务中使用了WATCH,一旦事务被放弃,EXEC将返回NULL-multi-bulk回复。...从上面代码看出第二条命令失败了,但是它并没有影响其它命令的执行,这一点也是Redis的事务与关系数据库中的事务最为重要的差别 3.回滚事务 ?

69620

Spring事务

在实际开发中,会经常涉及事务管理问题,为此 Spring 提供了专门用于事务管理的API。Spring 的事务管理简化了传统事务管理的流程,并且在一定程度上减少了开发者的工作量。...Spring 的事务管理分为2种形式: 传统的编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正式执行事务提交和异常时的事务回滚(我们能想到 AOP,这就是把事务代码封装到了 “切面”中...,也就是第二种声明式事务管理) 声明式事务管理:通过 AOP 技术实现的事务管理,其主要思想是将事务管理抽取到“切面”,然后通过 AOP 技术将事务管理的“切面”代码织入到业务目标类中。...声明式事务管理使得开发者在配置文件中进行相关的事务规则声明,无须编程,就可以将事务规则应用到业务逻辑中,减少了工作量,提高了开发效率。所以在实际开发中,通常都选用声明式事务管理。...基于XML方式的声明式事务 通过在配置文件中配置事务规则的相关声明来实现。Spring2.0 以后,提供了 tx 命名空间来配置事务, 来配置事务的通知/增强处理。

60810

MySQL 事务

数据库的事务 事务的定义 事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列组成;因为它是数据库最小的工作单元,是不可再分的;它还可能包含了一个或者一系列的 **DML** 语句(...**TransactionB** 里插入了一行数据并提交该事务;然后在 **TransactionA** 中再次去查询时就发现多了一行数据;这种一个事务前后两次读取数据不一致是由其他事务插入数据造成的的情况称之为事务中的幻读问题...**TransactionB** 开启事务第一次查询数据,但不提交事务;读取到两条数据,此时的事务 **ID = 2**; -- 开启事务 BEGIN; -- (1) 第一次查询 SELECT *...多个事务可以共享一把读锁,一般情况下在提交事务或结束事务就可以释放锁。读锁是可以重复获取的。...那么导致死锁的产生条件有: 因为锁是互斥的,在同一时间只能有一个事务持有这把锁; 其他的事务需要在这个事务释放锁之后才能获得,而不能强行获取; 当多个事务形成等待环路时就发生了死锁。

2.9K20
领券