`
zhang19841017
  • 浏览: 79753 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

事务隔离属性

阅读更多

在企业应用中,事务处理是一个很重要的问题,本文阐述了事务处理的相关概念,分析了数据库级别的事务并发时产生的问题和相对应的隔离级别,最后简单谈谈Hibernate对于事务处理的方法。
1.事务(transaction)
事务被认为是一系列操作的集合,是一个工作单元(unit of work),事务的处理的结果有两个一个是commit,令一个是roll back,事务有ACID特性(atomicity,consistency,isolation, durability)。atomicity是说明事务处理过程中不能够被打断;consistency是指事务所操作的数据是一个一致性的集合,也就是 这些数据对于其他并发进行的事务是隐藏的;isolation是指两个并发进行的事务相互之间是不可见的,也就是互不影响;durability是指事务 处理的结果将被持久化。
在分析事务处理时,要将原来的单个sql的commit,rollback和对事务的commit,roolback区分开来,一个事务可能是由多个sql操作所组成的。

2.并发事务执行时引起的问题
(1)lost update: A和B事务并发执行,A事务执行update后,提交;B事务在A事务update后,B事务结束前也做了对同样数据的update操作,然后rollback,则两次提交操作都丢失了。
(2)dirty read:A和B事务并发执行,B事务执行update后,A事务select B事务没有提交的数据,B事务roolback,则A事务得到的数据不是数据库中的真实数据。也就是dirty data(和数据库中不一致的数据)
(3)unrepeatable read:A和B事务并发执行,A事务select数据,然后B事务update该数据,A再次select该数据时,发现该数据变化了。(second lost updates:是unrepeatable read的一种特殊情况,即A事务update数据,然后B事务update数据,A事务select发现自己update的数据变了,该问题为什么不划 分到第一类问题,是和事务的隔离级别相关的,也就是A的select执行时允许了并发的B的update的执行,隔离级别3能够解决该问题,而隔离级别1 不能解决该问题)
(4)phantom read:A和B事务并发执行,A事务select数据,B事务insert或者update数据,A事务再次select发现结果集中有以前没有的数据或者以前有的数据消失了。

3.事务的隔离级别
在企业应用中,事务往往存在于并发执行的环境当中,那么如果做到并发事务之间完全的isolation,做到对于以上四大问题完全解决,那么势必会影响程 序的performance和scalability,因此减弱这种完全的isolation,而带来的就是performance和 scalability的提高。因此事务的隔离级别根据以前的四大问题有四种。
(1)read uncommitted isolation:不允许(1)问题存在,允许(2)问题存在。写事务执行时不允许同时有其他的写事务并发执行。
(2)read committed isolation:不允许(2)问题存在,允许(3)问题存在。读事务允许其他事务并发执行,没有提交的写事务执行时不允许同时有其他并发事务执行。
(3)repeatable read isolation:不允许(3)问题存在,允许(4)问题存在。读事务不允许写事务并发执行,没有提交的写事务执行时不允许同时有其他并发事务执行。
(4)serializable:完全解决问题。

4.Hibernate的折衷解决方案
一般的应用作隔离级别时,往往采用(2),(3)两种,(1),(4)两种前者轻后者重,但是Hibernate为了提高performance和 scalability,在数据库一层中采用的是(2)的隔离级别,然后在程序中进行控制,从而实现了(3)的隔离级别,因此提高了企业应用的事务处理效 率。当然Hibernate对于数据库一层的隔离级别也可以显示指定。
Hibernate在程序中的控制方法有:version number, timestamp,对于遗留database也有optimistic-lock,而version number有时不能解决特殊的事务并发引起来的(3)问题,那么就需要针对特殊情况进行细粒度的事务控制,可以看一下LOCKMODE。

分享到:
评论

相关推荐

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

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

    事务传播特性&事务隔离级别 事务传播特性是指在 Java 中,事务的传播行为,即在多个事务之间如何交互和传播。Java 中有七种事务传播特性,分别是: 1. PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。...

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

    本资料主要探讨的是Spring支持的数据库事务传播属性和事务隔离级别。 一、事务传播属性 1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。这是最常见的事务定义,适用于...

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

    ### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...

    06-VIP-深入理解Mysql事务隔离级别与锁机制.pdf

    深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...

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

    ### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...

    SSH--事务属性

    Spring提供了五种事务隔离级别: - ISOLATION_DEFAULT:使用数据库默认的隔离级别。 - ISOLATION_READ_UNCOMMITTED:最低级别的隔离,可能导致脏读、不可重复读和幻读。 - ISOLATION_READ_COMMITTED:防止脏读,...

    数据库事务与隔离技术

    在SQL SERVER和ORACLE中,事务隔离级别是不同的,它们决定了并发操作时数据的可见性和一致性。SQL SERVER提供了四种隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable ...

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

    MySQL 支持四种事务隔离级别:READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交)、REPEATABLE READ(可重复读)和 SERIALIZABLE(串行化)。每种隔离级别对应不同程度的事务并发问题的防范,其中,MySQL ...

    详解Mysql事务隔离级别与锁机制.doc

    详解Mysql事务隔离级别与锁机制 本篇文章详细介绍了Mysql事务隔离级别与锁机制的概念、原理和应用。事务隔离级别是数据库系统中的一种机制,用于解决多事务并发问题,包括脏写、不可重复读、幻读等问题。锁机制是...

    Spring事务传播属性

    TransactionDefinition接口是Spring事务管理的核心接口之一,它提供了定义事务特性的方法,包括事务的隔离级别、超时时间、读写模式以及我们关注的事务传播属性。事务传播属性定义了当一个事务方法被另一个事务方法...

    EJB的事务属性

    此属性常用于需要独立事务边界的操作,确保与现有事务隔离。 3. **Mandatory**:要求调用方必须在一个事务中。如果调用方不在事务中,EJB容器将抛出`TransactionRequiredException`异常。这适用于那些依赖于事务上...

    msyql锁、事务隔离级别各种场景验证测试.rar

    这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了 事务隔离机制、锁机制、MVCC多版本并发控制隔离机制 ,用一整套机制来 解决多事务并发问题。 事务及其ACID属性 事务是由一组...

    深入理解Mysql锁与事务隔离级别1

    《深入理解MySQL锁与事务隔离级别》 在数据库管理中,锁和事务隔离级别是确保数据一致性与并发控制的重要概念。本文将详细阐述MySQL中的锁机制以及事务的四种隔离级别,以帮助读者更好地理解和应用这些关键概念。 ...

    Spring事务隔离级别简介及实例解析

    Spring事务隔离级别简介及实例解析 本文主要介绍了Spring事务隔离级别的概念和实例解析,涵盖了四个事务隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。同时,文章还提供了相关代码...

    Spring事务详细讲解

    1. ISOLATION_DEFAULT:这是一个 PlatformTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。 2. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它允许别的外一个事务可以看到这个事务未...

    数据库事务ACID属性:确保数据一致性的关键

    事务的ACID属性是确保数据库事务正确执行的四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。本文将详细探讨这四个属性,并展示如何在实际的数据库操作中...

    【面试高频!】数据库事务/事务的作用/数据库事务ACID属性 / 特性/事务的隔离性/数据库事务隔离级别/ 数据库的隔离级别导致问题/数据库事务的使用/mysql的事务死锁/ 快速解决mysql死锁问

    数据库事务ACID属性 / 特性 原子性(Atomicity):要么全部完成,要么全部不完成。 一致性(Consistency):事务必须始终保持系统处于一致性。 隔离性(Isolation):隔离执行事务,使它们好像是系统在给定时间内执行的...

    主题:详解spring事务属性.doc

    Spring 提供了五种事务隔离级别: 1. `ISOLATION_DEFAULT`:使用数据库默认的隔离级别。 2. `ISOLATION_READ_UNCOMMITTED`:这是最低的隔离级别,允许脏读,即一个事务可以读到另一个未提交事务的数据,可能导致...

    Spring事务属性

    本文将详细解析Spring事务属性中的四个关键元素:事务隔离级别、事务传播行为、事务超时时间以及事务是否只读。 首先,我们来探讨事务隔离级别。事务隔离级别是解决并发事务可能导致的问题,如脏读、不可重复读和幻...

Global site tag (gtag.js) - Google Analytics