在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的事物隔离级别。这种配置会使用表级锁,对性能影响巨大。一般没有
特殊需要的话,配置为使用数据库缺省的事物隔离级别便可。
分享到:
相关推荐
为了更好地理解和应用事务,我们需要深入学习Spring中的事务隔离级别及其配置方式。本文主要围绕Spring事务隔离级别展开讨论,并结合Spring声明式事务的特点进行分析。 #### 二、Spring事务隔离级别 事务隔离级别...
### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...
### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...
在 Java 中,事务传播特性和事务隔离级别都是通过 TransactionDefinition 来定义的。TransactionDefinition 是一个接口,提供了事务的基本信息,包括事务的名称、timeout、readOnly、隔离级别等。 在 Spring 框架中...
### Spring事务的传播特性和隔离级别 #### 一、事务的基本概念 在计算机科学中,事务(transaction)是指一系列操作的集合,这些操作要么全部成功完成,要么全部失败回滚,确保数据的一致性和完整性。事务具备四个...
在Spring事务管理中,事务隔离级别是一个非常重要的概念,它定义了事务在并发执行时如何避免互相干扰和保持数据一致性。今天,我们将详细介绍Spring中的事务隔离级别,了解其特性和解决的问题。 事务简介 -------- ...
在 TransactionDefinition 接口中定义了五个不同的事务隔离级别: 1. ISOLATION_DEFAULT:这是一个 PlatformTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。 2. ISOLATION_READ_UNCOMMITTED:...
在Spring中,通过`@Transactional`注解的`isolation`属性可以设置事务隔离级别,如`@Transactional(isolation = Isolation.READ_COMMITTED)`。 理解并合理运用这些事务传播属性和隔离级别,对于编写高效、稳定且...
使用它,你可以控制事务的开始、提交、回滚以及设置事务隔离级别。 在Spring事务中,有几种常见的隔离级别可供选择,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)...
2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离,降低了代码的耦合度。`@Transactional`注解可以应用于方法级别,表示该...
本知识点将深入探讨Spring中的事务管理,主要包括事务的传播特性、隔离级别以及readonly属性。 1. 事务的传播特性: 在Spring中,事务的传播特性定义了在一个事务方法被另一个事务方法调用时,应该如何处理事务...
4. **声明式事务管理**:Spring允许在配置文件中声明事务边界,这样可以在多个方法之间定义事务传播行为和隔离级别,而无需在代码中显式处理。 例如,以下是如何使用HibernateTemplate删除Userinfo对象: ```java ...
在 Spring 配置文件中,我们需要定义事务处理类,不同的数据访问方式,事务处理类不同,如 Hibernate 操作的 HibernateTransactionManager,JDBC 操作的使用 DataSourceTransactionManager。 接下来,我们需要定义...
5. **事务隔离级别**:Nested事务继承了父事务的隔离级别,所以不需要额外设置。 通过这个案例,我们可以学习如何在Spring中正确地使用Nested事务,并理解其背后的原理。对于开发复杂的业务逻辑,尤其是在多层服务...
- 配置中可能需要根据实际情况调整事务的隔离级别、超时限制、回滚规则等属性。 7. **声明式事务的四种配置方式**: - XML配置:如上所示,通过`<tx:advice>`和`<aop:config>`标签进行配置。 - @Transactional...
MySQL数据库系统支持四种不同的事务隔离级别,这些级别是根据并发操作可能导致的问题来设定的,旨在保证数据的一致性和完整性。了解这些隔离级别对于优化数据库性能和处理多用户环境中的并发问题至关重要。 1. 读未...
3. **注入事务配置**:在代理对象中注入事务相关的配置,如事务的传播行为、隔离级别等。 4. **事务处理**:在调用被代理的方法时,Spring会自动处理事务的开启、提交或回滚。 #### 二、Spring事务的传播属性 ...
`TransactionDefinition`接口定义了五种不同的事务隔离级别: - **ISOLATION_DEFAULT**:平台默认的隔离级别,使用数据库默认设置。 - **ISOLATION_READ_UNCOMMITTED**:最低的隔离级别,允许读取未提交的数据,...
隔离级别是事务管理中的另一个核心概念,Spring支持数据库默认的五种隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。不同的隔离级别会带来不同的并发问题,如脏读、不可重复读和幻读...
3. **事务隔离级别**:Spring支持四种标准的事务隔离级别,包括READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。不同的隔离级别可以防止并发操作引发的数据不一致问题,但也会对性能产生影响,...