事务隔离级别

Spring事务:传播行为与隔离级别

℡╲_俬逩灬. 提交于 2020-01-04 01:30:35
文章主要来源:https://github.com/dengdaiyemanren/onetopiconeday/wiki/spring%E4%BA%8B%E5%8A%A1%E9%85%8D%E7%BD%AE 传播行为 在TransactionDefinition接口中定义了七个事务传播行为: PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起,需要使用JtaTransactionManager作为事务管理器。 PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 也需要使用JtaTransactionManager作为事务管理器 PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 隔离级别

数据库传播级别和隔离级别详解(转载)

≯℡__Kan透↙ 提交于 2020-01-04 01:29:40
事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。 事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。 以下是事务的7种传播级别: 1) PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么就加入到事务中执行,如果当前上下文中不存在事务,则新建事务执行。所以这个级别通常能满足处理大多数的业务场景。 2) PROPAGATION_SUPPORTS ,从字面意思就知道,supports,支持,该传播级别的特点是,如果上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行。所以说,并非所有的包在transactionTemplate.execute中的代码都会有事务支持。这个通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。 3) PROPAGATION_MANDATORY , 该级别的事务要求上下文中必须要存在事务,否则就会抛出异常!配置该方式的传播级别是有效的控制上下文调用代码遗漏添加事务控制的保证手段。比如一段代码不能单独被调用执行,但是一旦被调用,就必须有事务包含的情况,就可以使用这个传播级别。 4) PROPAGATION

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

核能气质少年 提交于 2020-01-04 01:28:48
事物注解方式: @Transactional 【一】传播行为: 使用方法: @Transactional(propagation=Propagation.REQUIRED) Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的; Supports:支持当前事务,如果当前没有事务,就以非事务方式执行; Mandatory:支持当前事务,如果当前没有事务,就抛出异常; RequiresNew:新建事务,如果当前存在事务,把当前事务挂起,先执行新的在执行旧的; NotSupported:容器不为这个方法开启事务。 Never:以非事务方式执行,如果当前存在事务,则抛出异常。 Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。 【二】隔离级别: 先上一张图:    1、事务的隔离级别:是为了使你在性能与数据的有效性之间做一个平衡,不是说级别越高越好,只有合适才是最好的。   多用于处理多事务的并发问题,并行可以提高数据库的吞吐量和效率。 使用方法: @Transactional(isolation = Isolation.SERIALIZABLE)   Serializable(串行化 )。最严格的级别,事务串行执行,资源消耗最大;   Repeatable Read(可重复读)。  

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

只愿长相守 提交于 2020-01-04 01:28:34
转载自:http://blog.chinaunix.net/u1/55983/showart_2091761.html 7个传播行为,4个隔离级别, Spring事务的传播行为和隔离级别[transaction behavior and isolated level]2007-08-01 16:33事务的传播行为和隔离级别[transaction behavior and isolated level] Spring中事务的定义: 一、Propagation :   key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

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

不打扰是莪最后的温柔 提交于 2020-01-04 01:27:44
Spring事务的传播行为和隔离级别 [ transaction behavior and isolated level ] 2007 - 08 - 01 16 : 33事务的传播行为和隔离级别 [ transaction behavior and isolated level ] Spring中事务的定义: 一、Propagation :   key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用: PROPAGATION_REQUIRED - - 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS - - 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY - - 支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW - - 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED - - 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER - - 以非事务方式执行,如果当前存在事务,则抛出异常。 很多人看到事务的传播行为属性都不甚了解,我昨晚看了j2ee without ejb的时候,看到这里也不了解

数据库事务隔离级别

我的未来我决定 提交于 2020-01-04 01:25:58
数据库隔离级别 : 是在在数据库操作中,为了有效保证并发读取数据的正确性提出的。   隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把 数据库系统 的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致 不可重复读 、 幻读 和 第二类丢失更新 这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用 悲观锁 或 乐观锁 来控制。 数据库的几种隔离级别: READ UNCOMMITTED (读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。 READ COMMITTED (读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。 REPEATABLE READ (可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。 SERIALIZABLE (序列化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能非常低。 Oracle支持两种事务隔离级别:    READ COMMITTED (默认事务隔离级别),

JDBC控制事务

不羁的心 提交于 2020-01-04 01:25:31
概念 事务(Transaction)是访问并可能更新数据库中各种 数据项 的一个程序执行单元(unit)。事务通常由 高级数据库 操纵语言或编程语言(如SQL,C++或Java)书写的 用户程序 的执行所引起,并用形如begin transaction和end transaction语句(或 函数调用 )来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 例如:在 关系数据库 中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。 特性 事务是恢复和 并发控制 的基本单位。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

事务的隔离级别

会有一股神秘感。 提交于 2020-01-04 01:23:43
为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。 ● 未授权读取(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。 ● 授权读取(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。 ● 可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。 ● 序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能

事物的隔离级别

旧巷老猫 提交于 2020-01-04 01:22:46
事物的含义: 1、原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。 例如:A帐户向B帐户划账1000,则先将A减少1000,再将B增加1000, 这两个动作要么都提交,要么都回退,不可能发生一个有效、一个无效的情况。 2、一致性(Consistency) 一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束。 例如:A、B帐户的总金额在转账前和转帐后必须一致,其中的不一致必须是短暂的,在事务提交前才会出现的。 再如:约定B帐户不能多于1000元,则A转出1000成功,B转入1000失败,最终由原子性得到-整个事务回滚 3、隔离性(Isolation) 隔离性是数据库允许多个并发事务同时对数据进行读写和修改的能力, 隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。 例如:在A、B之间转帐时,C同时向A转帐,若同时进行则A、B之间的一致性不能得到满足。 所以在A、B事务执行过程中,其他事务不能访问(修改)当前相关的数值。 4、持久性(Durability) 持久性表示为:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 在提交之前如果系统故障,则所有信息全部丢失。提交之后数据存放在磁盘中,是永久性的。 事务隔离级别 事务隔离级别

事务隔离级别小记

对着背影说爱祢 提交于 2020-01-04 01:21:40
事务的四个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。 1.原子性(Atomic) 最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。 2.一致性(Consistency) 事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。 3.隔离性(Isolation) 在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。重要的是,在隔离状态执行事务,系统的状态有可能是不一致的,在结束事务前,应确保系统处于一致状态。但是在每个单独的事务中,系统的状态可能会发生变化。如果事务不是在隔离状态运行,它就可能从系统中访问数据,而系统可能处于不一致状态。通过提供事务隔离,可以阻止这类事件的发生。 4.持久性(Durability) 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的