spring 事务隔离级别

事务隔离级别 说明 脏读 不可重复读 幻读
DEFAULT 用底层数据库的设置隔离级别 - - -
READ_UNCOMMITTED 未提交读
READ_COMMITTED 提交读
REPEATABLE_READ 可重复读
SERIALIZABLE 序列化
  • 脏读:脏读指的是事务A读到了其他事务未提交的数据,意思数据可能会回滚,不会存到数据库中

  • 不可重复读:不可重复读指的是在A事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况(事务B对数据进行了更新并提交),常用于数据更新

  • 幻读:幻读指的是 事务A 查询不到已经存在的记录,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样

Spring事务传播属性

事务传播属性 说明
REQUIRED 默认,支持当前事务,如果当前没有事务,就新建一个事务
SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行
MANDATORY 支持当前事务,如果当前没有事务,就抛出异常
REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED 支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。(内层事务回滚不会影响外层事务,外层事务回滚会影响内层事务)