事务的隔离级别和传播特性

脏读:当一个事务读取另一个事务未提交的内容,之后由于另一个事务出现了异常回滚了事务,结果造成读取的数据不一致

不可重复读:指一个事务多次读取同一数据,而另一个事务多次对数据进行了修改的操作,这样就导致了第一个事务每次读取的数据不一样,

幻读:当事务一对整张表的数据进行操作时对其进行了新增行,而另一个事务对其进行了删除行,而这时事务一本身对其进行了新增行然而发现并没有对其新增行而产生了幻觉

脏读与不可重复读的区别:脏读是对没有提交的数据进行查询,不可重复读是对已经提交的数据进行的查询

不可重复读与幻读的区别:不可重复读针对的时update操作,幻读一般是insert和delete操作

事务的隔离级别就是用来解决脏读、不可重复读和幻读问题

事务的隔离级别一般有四种(spring提供了五种):

1.DEFAULT   默认使用数据库的隔离级别

2.READ_UNCOMMITTED  能读取还未提交的事务,不能解决脏读、不可重复度和幻读

3.READ_COMMITTED  只能读取已经提交的事务,能解决脏读,不能解决不可重复读和幻读,一般使用此隔离级别

4.REPEATABLE_READ   当一个事务读取这个数据时会对其进行加锁处理,防止其他事务对数据进行修改。重复读取(REPEATABLE_READ)的意思,读取了一条数据,这个事务不结束,别的事务就不可以改这条记录,这样就解决了脏读、不可重复读的问题,但是幻读的问题还是无法解决

5.SERLALIZABLE 串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了

事务的传播特性:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。

一共有七种传播行为:
1.PROPAGATION_REQUIRED  如果当前方法存在一个事务,则将该方法置于同一个事物中,如果之前不存在事务,则另新开启一个事物(delete ,insert update)

2.PROPAGATION_SUPPORTS 如果当前方法存在一个事务,则将该方法置于同一个事物中,如果之前不存在事务,则进行非事务执行(select)

3.PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

4.PROPAGATION_REQUIRES_NEW 使用PROPAGATION_REQUIRES_NEW,需要使用 JtaTransactionManager作为事务管理器。 

它会开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起。

5.PROPAGATION_NOT_SUPPORTED PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。使用PROPAGATION_NOT_SUPPORTED,也需要使用JtaTransactionManager作为事务管理器。

6.PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常。

7.PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中。 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

原文地址:https://www.cnblogs.com/blog-pl/p/10919393.html

时间: 2024-10-11 22:59:54

事务的隔离级别和传播特性的相关文章

Spring事务隔离级别和传播特性

在Spring中,声明式事务是用事务参数来定义的.一个事务参数就是对事务策略应该如何应用到某个方法的一段描述,如下图所示一个事务参数共有5个方面组成: 传播行为 事务的第一个方面是传播行为.传播行为定义关于客户端和被调用方法的事务边界.Spring定义了7中传播行为. 传播行为 意义 PROPAGATION_MANDATORY 表示该方法必须运行在一个事务中.如果当前没有事务正在发生,将抛出一个异常 PROPAGATION_NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌

实战分析:事务的隔离级别和传播属性

什么是事务? 要么全部都要执行,要么就都不执行. 事务所具有的四种特性 原子性,一致性,隔离性,持久性 原子性 个人理解,就是事务执行不可分割,要么全部完成,要么全部拉倒不干. 一致性 关于一致性这个概念我们来举个例子说明吧,假设张三给李四转了100元,那么需要先从张三那边扣除100,然后李四那边增加100,这个转账的过程对于其他事务而言是无法看到的,这种状态始终都在保持一致,这个过程我们称之为一致性. 隔离性 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据是独立的: 持

事务的隔离级别和传播行为

一.事务的隔离级别 1.五种事务的隔离级别 ①读_未提交(read_uncommitted): 会出现脏读.不可重复读.幻读.(隔离级别最低,并发性能高) ②读_已提交(read_committed):会出现不可重复读.幻读.(锁定正在读取的行) ③重复读(repeatable_read):会出现幻读.(锁定所读取的所有行) ④序列化(serializable):保证所有的情况不会发生:(锁表) ⑤默认的隔离级别: 大多数的默认隔离级别是:读已提交(read_commited)如:Sql Ser

数据库事务的隔离级别及四大特性

在我们了解数据库隔离级别前先来回顾一下数据库读数据时可能遇到的问题: (1)脏读 一个事务对数据进行更新操作,但还完成,此时另一事务读取该数据,如果此时第一个事务由于操作失败进行了回滚,那么此时另外事务读取的数据就是脏数据. (2)不可重复读 例如事务A在读取某一数据,而事务B立马修改了这个数据并且提交事务给数据库,事务A再次读取该数据就得到了不同的结果,发送了不可重复读. ps:在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主.但在另一些情况下就有可能发

数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执

事务隔离级别、传播行为及锁机制

1.事务的特性 事务具备以下四个特性,简称ACID属性. 原子性(Atomicity): 事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行. 一致性(Consistency): 当事务完成时,数据必须处于一致的状态. 隔离性(Isolation): 并发事务之间相互独立.隔离,它不应以任何方式依赖于或影响其他事 务. 持久性(Durability): 事务完成后,它对数据库的修改被永久保持. 2. 事务的隔离级别 ① Read uncommitted (读未提交):

事务的特性及事务的隔离级别(转)

原文:http://www.cnblogs.com/fjdingsd/p/5273008.html 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consi

数据库事务的四大特性以及事务的隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执

数据库事务隔离级别及传播行为

一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. 1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据.      这种隔离级别会产生脏读,不可重复读和幻像读.2. ISOLATION_READ_COMMITTED:保证一个事务修改的