`
eredlab
  • 浏览: 58956 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

对脏读|不可重复度|幻读的理解以及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

这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。

什么是幻读?

例如:

目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。

此时,

事务B插入一条工资也为5000的记录。

这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。

(大部分数据库缺省的事物隔离级别都会出现这种状况,此种事物隔离级别将带来表级锁)


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

 

如下为开源产品分享:


 

 

G4Studio是一套面向中小软件企业及个人开发者的集设计、开发、部署、后期维护于一体,力求覆盖整个软件生命周期的高品质开源产品套件。

 

源码下载及在线演示:

http://www.g4studio.org/thread-12-1-1.html


  • 大小: 6.4 KB
分享到:
评论

相关推荐

    脏读不可重复读幻影读

    不同的事务隔离级别对脏读、不可重复读和幻读有不同的影响。根据ISO/IEC标准,事务隔离级别包括: 1. **READ UNCOMMITTED**(读未提交): - **脏读**、**不可重复读**、**幻读**都可能发生。 - **特点**:并发...

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

    - 对同一字段的多次读取返回相同的值,除非数据被当前事务本身更改,这可以防止脏读和不可重复读,但幻读仍可能发生。 5. **ISOLATION_SERIALIZABLE** - 最高的隔离级别,确保事务顺序执行,可以防止所有并发问题...

    SPRING事务传播特性&事务隔离级别

    - **问题**:可能导致脏读、不可重复读和幻读。 - **应用场景**:通常不建议使用,除非有特殊需求。 3. **ISOLATION_READ_COMMITTED** - **定义**:一个事务只能读取已提交的数据。 - **问题**:可以避免脏读...

    02.Spring支持的常用数据库事务传播属性和事务隔离级别.zip

    事务隔离级别是控制并发操作时如何避免脏读、不可重复读和幻读的关键。Spring支持四种标准的SQL事务隔离级别: 1. READ_UNCOMMITTED(未提交读):最低级别的隔离,可能会出现脏读、不可重复读和幻读。在大多数情况...

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

    可能会导致脏读、不可重复读和幻读。 3. **Isolation_READ_COMMITTED**:只允许读取已提交的数据。可以防止脏读,但仍然可能发生不可重复读和幻读。 4. **Isolation_REPEATABLE_READ**:防止脏读和不可重复读,但...

    Spring 管理事务(传播特性、隔离级别、readonly).rar

    隔离级别用于解决并发控制中可能出现的问题,如脏读、不可重复读和幻读。Spring支持四种隔离级别: - READ_UNCOMMITTED:最低隔离级别,允许读取未提交的数据,可能导致脏读、不可重复读和幻读。 - READ_...

    Spring事务详细讲解

    4. ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。 5. ISOLATION_...

    深入理解spring的事务管理机制

    5. **ISOLATION_SERIALIZABLE**:最高隔离级别,完全避免脏读、不可重复读和幻读。 通过上述内容,我们可以看出Spring的事务管理机制是基于AOP和底层数据库支持的,它极大地简化了事务处理的复杂度,并提供了灵活的...

    Spring事务管理Demo

    - `SERIALIZABLE`:最高隔离级别,防止脏读、不可重复读和幻读,但性能最低。 在Spring事务管理Demo中,通常会包含以下几个步骤: 1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、...

    行业-52 MySQL是如何支持4种事务隔离级别的?Spring事务注解是如何设置的?l.rar

    这是最高的隔离级别,它通过锁定事务涉及的所有行来防止脏读、不可重复读以及幻读。然而,这可能导致更高的锁竞争,从而影响系统性能。 Spring框架提供了事务管理功能,其中包括使用注解的方式来声明事务。Spring的...

    spring 事务管理的理解

    根据业务需求,选择合适的隔离级别可以避免脏读、不可重复读和幻读等问题。 在Spring的事务管理中,还有回滚规则和异常处理。默认情况下,运行时的检查异常(checked exception)不会导致事务回滚,而未检查异常...

    事务传播特性&事务隔离级别

    4. ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。 5. ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。 在使用事务时,需要了解事务传播特性...

    JDBC事务 JTA事务 传播特性 隔离级别

    - **序列化(Serializable)**:最高的隔离级别,完全避免了脏读、不可重复读和幻读,但可能影响性能。 4. **持久性(Durability)**:一旦事务提交,其更改就会永久保存,即使系统出现故障也能恢复。 接下来,...

    spring事务操作试验

    每种隔离级别都有其特定的并发控制策略,以防止脏读、不可重复读和幻读等并发问题。 "spring事务操作主要对象.png"可能展示了Spring事务管理的关键组件,如TransactionDefinition(定义事务属性)、...

    Spring声明式事务处理

    - `SERIALIZABLE`:最高级别,防止脏读、不可重复读和幻读,但性能最差。 - `DEFAULT`:使用数据库的默认隔离级别。 了解了这些基本概念后,我们就可以利用Spring声明式事务处理来确保我们的应用程序在处理数据时的...

    Spring中的事务隔离级别的介绍

    事务隔离要解决的问题有三个:脏读、不可重复读和幻读。 * 脏读(Dirty Read):一个事务读到另一个事务还没有提交的数据。如果另一个事务失败了,回滚了,那么第一个事务读到的数据就是无效的数据。 * 不可重复读...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    - READ_UNCOMMITTED:最低级别,允许脏读、不可重复读和幻读。 - READ_COMMITTED:防止脏读,但可能发生不可重复读和幻读。 - REPEATABLE_READ:防止脏读和不可重复读,但可能发生幻读。 - SERIALIZABLE:最高级别,...

    spring几种事务配置详解【精】

    - `READ_UNCOMMITTED`:最低级别,可能导致脏读、不可重复读和幻读。 - `READ_COMMITTED`:防止脏读,但可能产生不可重复读和幻读。 - `REPEATABLE_READ`:防止脏读和不可重复读,但可能出现幻读。 - `...

Global site tag (gtag.js) - Google Analytics