`
为了明天
  • 浏览: 115474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Isolation Level(Spring事务5种隔离等级):

 
阅读更多
Isolation Level(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的事物隔离级别。这种配置会使用表级锁,对性能影响巨大。一般没有特殊需要的话,配置为使用数据库缺省的事物隔离级别便可。

分享到:
评论

相关推荐

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

    总之,MySQL 的事务隔离机制允许用户根据需要选择合适级别的隔离,同时提供了 `SET TRANSACTION ISOLATION LEVEL` 命令和 Spring 的 `@Transactional` 注解来灵活配置,以保证数据的一致性和应用的性能。对于开发者...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    事务的隔离级别(Isolation Level)则定义了并发事务间的数据可见性规则。通常有四个隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。每个级别的选择都会影响并发性能和数据一致性。 ...

    spring事务管理

    #### 二、事务隔离等级(Isolation Level) 事务隔离等级定义了在并发事务环境中,一个事务能够“看见”另一个事务的程度。Spring提供了以下几种隔离级别: ##### 1. Serializable - **描述**:最高级别的隔离级别...

    spring 事务

    Spring 还提供了事务隔离级别(Isolation Level)的概念,包括READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,这些级别决定了事务在并发环境下的行为。 在Spring框架中,事务回滚规则是基于...

    跟我学Spring3(9.1)Spring的事务之数据库事

    此外,Spring的隔离级别设置(Isolation Level)允许调整并发事务间的隔离程度,包括READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE等。不同的隔离级别对应不同的并发问题解决方案,如脏读、不可...

    Spring事务传播属性和隔离级别详细介绍

    事务的隔离级别(Isolation Level)是指事务在并发环境中的隔离性。它定义了事务如何避免脏读、不可重复读和幻像读等问题。 1. 脏读(Dirty Reads):一个事务正在对数据进行更新操作,但是更新还未提交,另一个...

    MySQL事务及Spring隔离级别实现原理详解

    在Spring框架中,`@Transactional`注解提供了设置事务隔离级别的能力,可以通过`isolation`参数调整Session级别的隔离。 至于死锁,它是并发控制中常见的问题,发生在两个或更多事务互相等待对方释放资源而陷入僵局...

    深入分析 Spring 源码(第四阶段)

    具体到事务管理的源码分析,Spring通过定义TransactionDefinition接口来描述事务的定义信息,包含事务的传播行为(PropagationBehavior)和事务的隔离级别(IsolationLevel)。传播行为决定了事务在遇到其他事务时的...

    Java数据库高级编程宝典

    通过设置TransactionIsolationLevel,控制并发操作的隔离级别,以及使用Connection对象的commit()和rollback()方法,可以实现ACID(原子性、一致性、隔离性和持久性)属性。 3. **PreparedStatement**: ...

    这是一篇对java八股文的详细介绍的文章

    - **事务控制**:通过SET TRANSACTION ISOLATION LEVEL语句控制事务隔离级别。 #### 五、设计模式 1. **工厂模式** - **目的**:封装实例化过程,将实例化的逻辑集中在一个地方。 2. **单例模式** - **目的**:...

    ssh easyui

    5. **隔离级别(Isolation Level)**:在并发环境中,控制不同事务间的可见性和一致性,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。...

    jdbc_jdbc_

    - Connection的isolationLevel属性设置事务隔离级别。 - ResultSet的滚动和定位功能,如`ResultSet.TYPE_SCROLL_INSENSITIVE`和`ResultSet.CONCUR_READ_ONLY`。 综上所述,"jdbc_jdbc_"项目将涵盖从基础的数据库...

Global site tag (gtag.js) - Google Analytics