Spring-事物的隔离级别

Spring中定义了5中不同的事务隔离级别:

1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) ;
  这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。
2. ISOLATION_READ_UNCOMMITTED (未提交)
  这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。  这种隔离级别会产生脏读,不可重复读和幻像读。
  大部分数据库缺省的事物隔离级别都不会出现这种状况)
3. ISOLATION_READ_COMMITTED  (已提交)
  保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
什么是脏读?(修改且未提交引起)
  例如:
  张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。与此同时,事务B正在读取张三的工资,读取到张三的工资为8000。随后,事务A发生异常,而回滚了事务。张三的工资又回滚为5000。最后,事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。
(大部分数据库缺省的事物隔离级别都不会出现这种状况) ; 

4. ISOLATION_REPEATABLE_READ  (可重复读)
  这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。

什么是不可重复读?(修改引起)  例如: 在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。与此同时,事务B把张三的工资改为8000,并提交了事务。随后,在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。 (大部分数据库缺省的事物隔离级别都不会出现这种状况)

5. ISOLATION_SERIALIZABLE (可串行读)
  这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。什么是幻读?(添加新记录引起)  例如:   A目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。此时,事务B插入一条工资也为5000的记录。这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。 大部分数据库缺省的事物隔离级别都会出现这种状况,此种事物隔离级别将带来表级锁) 

  说明 :Oracle数据库缺省的事物隔离级别已经保证了避免脏读和不可重复读。但可能会幻读,避免幻读需要加表级锁,Oracle缺省行级锁。在基于Spring的事物配置中一定要慎重使用ISOLATION_SERIALIZABLE的事物隔离级别。这种配置会使用表级锁,对性能影响巨大。一般没有特殊需要的话,配置为使用数据库缺省的事物隔离级别便可

时间: 2024-08-25 15:10:45

Spring-事物的隔离级别的相关文章

spring中事物的隔离级别

一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行.PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常.PROPAGATION_RE

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

spring的事务隔离级别 ISOLATION_DEFAULT:使用数据库默认的隔离级别. ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读.不可重复读和幻读. ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读. ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读. ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发

事物的隔离级别和传播属性

1.ACID:原子性.一致性.隔离性.持久性 2.事务:显示,隐士事物 3.不一致性: 更新丢失(覆盖了).脏读(读取到了未提交的数据).不可重复读(两次读取的结果不一致) 4. 四个隔离级别:--主要保证查询时最新的 READ UNCOMMITTED --不申请X锁与S锁 READ COMMITTED     --申请S锁 REPEATABLE READ    --锁定查询结果,这样其他事务不可以更新查询到的结果数据 SERIALIZABLE           --数据集上放置一个范围锁 七

数据库(1)-事物的隔离级别

定义 事物是需要保持一致性的一批语句的集合,一个事物中的语句执行需要一定的时间,在此时间内对待外部变化的策略就是隔离级别. 事物的隔离级别有四种:读未提交,读已提交,可重复读,串行化. 安全性依次提高,性能依次下降. 1.读未提交 当事物隔离级别被设置为读未提交时,在此事物期间,外部事物未提交的更新可以被读取到. 所以会发生脏读. 事物A set tx_isolation='READ-UNCOMMITTED'; start TRANSACTION; 事物B start TRANSACTION;

Spring事务的隔离级别

转自:http://blog.csdn.net/zhouwubin123/article/details/7199538 担心文章没有了, 在这里重复贴一下. 在Spring中定义了5中不同的事务隔离级别: 1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) ; 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 2. ISOLATION_READ_UNCOMMITTED这是事务最低的隔离级别,它充许别外一个事务可以看到

Spring随笔 - 事务隔离级别

Spring提供5中事务隔离级别: ISOLATION_DEFAULT:使用数据库后端的默认隔离级别. ISOLATION_READ_UNCOMMITTED:允许读取尚未提交的数据变更.可能会导致脏读.幻读或者不可重复读. ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据.可以阻止脏读,但是幻读或者不可重复读仍有肯能发生. ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果是一致的.除非数据被本事务自己所修改,可以防止脏读和不可重复读,但

spring事务中隔离级别和spring的事务传播机制

Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要 么就不做.也就是说,事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位.于是,人们就归纳出事务的第一个特性:原子性(Atomicity).我靠,一点都不神秘嘛. 特别是在数据库领域,事务是一个非常重要的概念,除了原子性以外,它还有一个极其重要的特性,那就是:一致性(Consistency).也就

Mysql中事物及隔离级别

什么叫事务 事务就是一组sql组成的操作单元,要么操作全部成功,要么全部失败. ACID属性 原子性(atomicity) 一个事物必须被视为一个不可分割的最小工作单元,整个事务要么全部成功,要么全部失败回滚,对一个事物来说,不可能只执行其中的一部分操作. 一致性(consistency) 数据库总是从一个一致的状态转换到另外一个一致的状态.比如总共两个update,在第一个update后,系统崩溃了,也不会对数据有影响,因为事务没提交. 隔离性(isolation) 一个事务所做的修改在最终提

事物的隔离级别

PS:引用他处 http://blog.csdn.net/fg2006/article/details/6937413

事物隔离级别_悲观与乐观锁

  1.我印象中的事物事务是一种机制,它确保多个SQL语句被当作完整的操作单元来处理,所有的操作都完成时统一提交. 2.关系数据库的事务特性(ACID) ACID:原子性: 事务是数据库的逻辑工作单位,而且必须是原子工作单位,对于修改,要么全部执行,要么全部不执行        一致性:事务在完成时,必须是所有的数据都保持一致状态. 隔离型: 一个事务的执行不能被其他事务所影响.事务必须是互相隔离的,防止并发读写同一个数据的情况发生 持久性: 一个事务一旦提交,事物的操作便永久性的保存在DB中.