spring 事务隔离级别
事务隔离级别 | 说明 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|---|
DEFAULT | 用底层数据库的设置隔离级别 | - | - | - |
READ_UNCOMMITTED | 未提交读 | ✅ | ✅ | ✅ |
READ_COMMITTED | 提交读 | ❌ | ✅ | ✅ |
REPEATABLE_READ | 可重复读 | ❌ | ❌ | ✅ |
SERIALIZABLE | 序列化 | ❌ | ❌ | ❌ |
-
脏读:脏读指的是事务A读到了其他事务
未提交
的数据,意思数据可能会回滚,不会存到数据库中 -
不可重复读:不可重复读指的是在A事务内,最开始读到的数据和事务结束前的任意时刻读到的
同一批数据出现不一致
的情况(事务B对数据进行了更新并提交),常用于数据更新 -
幻读:幻读指的是 事务A
查询不到已经存在
的记录,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样
Spring事务传播属性
事务传播属性 | 说明 |
---|---|
REQUIRED | 默认,支持当前事务,如果当前没有事务,就新建一个事务 |
SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行 |
MANDATORY | 支持当前事务,如果当前没有事务,就抛出异常 |
REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
NESTED | 支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。(内层事务回滚不会影响外层事务,外层事务回滚会影响内层事务) |