Spring 事务管理 4种隔离级别

原创 2018年04月16日 18:00:34
数据库事务的隔离级别有如下几种
public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);

    private final int value;

    private Isolation(int value) {
        this.value = value;
    }

    public int value() {
        return this.value;
    }
}

下面分别进行解释:

Default  即默认级别 其中 Sql Server ,Oracle 的默认级别为Read committed  mySql的默认隔离级别为 Repeatable read。

Read uncommitted 

读未提交:即一个事务可以读取另一个事务还没有提交的数据

这样可能导致读取脏数据:比如,A事务保存了 数据 data 但是还没有提交,这个时候 B事务就可以读取到data了,但是A事务出现了异常回滚,这个时候B已经获取了之前保存的脏数据。

Read committed

读提交:即一个事务只能读取另一个事务提交后的数据

这样会导致不可重复读:比如A开启事务,读取data为 A,此时 B开启事务,将data的数据修改为 B,这时在A事务里面 data仍旧为A,等候后续的操作时,就可能导致由于数据不是A而发生的异常。


Repeatable read

可重复读:就是在事务开启读取的时候,不在允许修改操作

比如A开启事务,读取data为A,此时B开始事务,修改data为B,此时事务B将失败,因为不允许修改(Update)操作

但是仍旧可能导致幻读问题(幻读问题是由于insert操作引起的)


幻读 比如读取某一个列数据的和,当事务A开启事务,读取列和为(100),就在这个时候事务B插入一条数据列(20),然后事务A打印列和(事务提交)结果打印的结果为120 ,而在事务中结果一直为 100 就好像是出现了幻觉一样,因而称为幻读。

    @Transactional(rollbackFor = Exception.class, propagation = Propagation.NESTED)
    public int save() {
        personMapper.insert(Person.builder().name("A").age(12).build());
        // 此结果为 1
        System.out.println(personMapper.selectCount(null));
        try {
            //@Transactional(rollbackFor = Exception.class, propagation = Propagation.NESTED)
            b.save();
        } catch (Exception e) {

        }
        // 此结果为 2   在同一个事务中结果不一样
        return personMapper.selectCount(null);
    }

Serializable 在该级别下,事务串行化顺序执行,这样可以解决幻读的问题,但是效率低下,不推荐使用。

spring的事务管理,事务隔离级别(代码级别)

Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Sprin...
  • cs_fei
  • cs_fei
  • 2013-08-04 17:52:21
  • 1183

数据库事务的四大特性、隔离级别以及Spring中如何利用AOP进行事务管理

首先,什么是事务? 事务就是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么成功,要么失败。 其次,事务的特性有哪些? 1.原子性。 例如,转账,A账户减少,B账户增加。虽然是两条 DML语...
  • c_w_d
  • c_w_d
  • 2017-03-18 13:55:05
  • 3050

理解事务的4种隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。Read uncommitt...
  • qq_33290787
  • qq_33290787
  • 2016-07-16 16:19:20
  • 83510

通过例子理解事务的4种隔离级别

第1级别:Read Uncommitted(读取未提交内容)第2级别:Read Committed(读取提交内容)第3级别:Repeatable Read(可重读)第4级别:Serializab...
  • zxh476771756
  • zxh476771756
  • 2017-12-01 15:23:26
  • 234

Spring_使用spring的注解式事务管理_事务的传播行为和隔离级别

事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 例子: @Transactional public class TestServiceBean i...
  • mikyz
  • mikyz
  • 2017-04-06 17:31:18
  • 167

四种隔离级别

简单地介绍一下四种隔离级别: Read Uncommtted(未提交读) 在Read Uncommitted级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称...
  • jiangshouzhuang
  • jiangshouzhuang
  • 2015-02-27 17:08:57
  • 823

spring的事务有几种方式,谈谈spring事务的隔离级别和传播行为

隔离级别: 1.default 使用数据库的默认隔离级别 2..READ_UNCOMMITTED 读未提交,会出现脏读,不可重复读和幻读 3,.READ_COMMITTED 会出现...
  • u010426961
  • u010426961
  • 2017-11-04 12:51:06
  • 74

spring的4种事务特性,5种隔离级别,7种传播行为

spring事务: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性...
  • weixin_38070406
  • weixin_38070406
  • 2017-10-04 11:11:35
  • 3536

四种隔离级别与锁

  • 2014年08月04日 16:03
  • 13KB
  • 下载

Spring Boot中的事务管理

什么是事务?我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016-09-23 14:41:34
  • 4049
收藏助手
不良信息举报
您举报文章:Spring 事务管理 4种隔离级别
举报原因:
原因补充:

(最多只允许输入30个字)