美文网首页
Spring 事物的隔离级别

Spring 事物的隔离级别

作者: LssTechnology | 来源:发表于2021-03-13 22:57 被阅读0次
前言:最近在看spring的事物
一、Spring事务隔离级别
image.png
  1. ISOLATION_DEFAULT: 默认的隔离级别,使用数据库默认的事务隔离级别。
  2. ISOLATION_READ_UNCOMMITTED: 未提交读,允许一个事务读取另外一个事务未提交的数据,或造成脏读、幻读、不可重复读。
  3. ISOLATION_COMMITTED: 提交读,保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。防止脏读。
  4. ISOLATION_RETETABLE_READ: 可重复读,可以防止脏读、不可重复读,但是还会造成幻读。(在可重复读(REPEATABLE READS)隔离级别中,基于锁机制并发控制的DBMS需要对选定对象的读锁(read locks)和写锁(write locks)一直保持到事务结束,但不要求“范围锁(range-locks)”,因此可能会发生“幻影读(phantom reads)”
    在该事务级别下,保证同一个事务从开始到结束获取到的数据一致。这是Mysql的默认事务级别。)
  5. ISOLATION_SERIALIZABLE: 串行事务,事务串行执行,防止脏读、不可重复读、幻读。
  • 事物的隔离级别造成的问题
问题 描述
脏读 一个事物读到另一个事物未提交的更新数据。所谓脏读,就是指事物A读到了事物B还没有提交的数据,比如银行取钱,事物A开启事物,此时切换到事物B,事物B开启事物 -> 取走100元,事物A读取的肯定是数据库里面的原始数据,因为事物B取走了100块,并没有提交,数据库里面的账户余额肯定还是原始余额,这就是脏读
幻读 是指当事物不是独立执行时发生的一种现象。例如第一个事物对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事物也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事物的用户发现表中还有没有修改的数据行,就好像发生幻觉一样
不可重复读 在一个事物里面的操作中发现了未被操作的数据。比方说在同一个事物中先后执行两条一模一样的select语句,期间在此次事物中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读
隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
二、Spring事务传播机制
image.png
  • (需要事务加入)
     1. REQUIRED: 如果当前有事务就加入事务,如果没有事务则创建一个新的。
     2. REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

  • (嵌套事务)
     3. NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。如果没有事务,相当于REQUIRED。

  • (支持,如果有就支持,如果没有就算了)
     4.SUPPORTS: 如果当前存在事务,则加入该事务。如果当前没有事务,则以非事务的方式进行。

  • (不支持)
     5. NOT_SUPPORTS: 以非事务方式运行。如果当前有事务,则把当前事务挂起。

  • (强制性的,一定要有,没有就抛异常)

    1. MANDATORY:如果当前存在事务,则运行在当前事务中。如果没有事务,则抛出异常。
  • (从不,比NOT_SUPPORT更硬,直接异常)
     7. NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务。

相关文章

  • Spring 事物的隔离级别

    前言:最近在看spring的事物 一、Spring事务隔离级别 ISOLATION_DEFAULT: 默认的隔离...

  • 事物隔离级别

    事物隔离级别 脏读、不可重复读、幻读 脏读一个事务正在访问数据,并对数据进行了修改,而这种修改还没有提交到数据库中...

  • 事物的隔离级别

    read-uncommit 脏读read-commit 可以避免脏读,但是不可重复读(修改数据的时候造成的)rep...

  • 面试BAT前先搞定这些常问的MySQL面试题

    1、事物的并发?事物隔离级别,每个级别会引发什么问题?MySQL默认是哪个级别? 事物应该彼此完全隔离,以避免并发...

  • hibernate10

    两个事物都提交了,但没结果,这是事物的隔离级别,不可并发响应, 改变事物的隔离级别

  • Spring声明式事物

    Spring的事物分为两种,编程式事物和声明式事务,平时使用声明式事务是最多的。那么只要是事物就存在隔离级别:事务...

  • 干货!Spring事物传播特性隔离级别ACID及StringBo

    前言 今天来详细说一下Spring事物传播特性隔离级别ACID及StringBoot编程式事 一致的事物模型 Sp...

  • 2018-04-19Spring事务

    spring事务分为:5大隔离级别(数据库4大隔离级别) 7大传播属性 隔离级别理解就是对数据操作的隔离性操作,脏...

  • JDBC事物隔离级别

    脏读:这种情况发生在事务中允许读取未提交的数据。例如,A事物修改了一条数据,但是未提交修改,此时A事物对数据的修改...

  • Spring事务传播行为详解

    Spring事务的隔离级别和传播行为 一、简述 Spring 在 TransactionDefinition 接口...

网友评论

      本文标题:Spring 事物的隔离级别

      本文链接:https://www.haomeiwen.com/subject/dfqwqltx.html