事务的ACID特性

事务的ACID特性:

原子性是基础,隔离性是手段,持久性时目的这三个就是为了保证一致性

事务所面临问题:

  • Dirty Read脏读:事务A读取了事务B未提交的数据,并在这个基础上做了其他修改
  • Unrepeatable Read 不可重复读:事务A读取了事务B已提交的更改数据
  • Phantom Read 幻读:事务A读取了事务B已提交的新增的数据
事务隔离级别脏读不可重复读幻读
READ_UNCOMMITTED
READ_COMMITTED×
REPEATABLE_READ××
SERIALIZABLE×××

Spring的事务传播功能,7种

前提:假设事务从方法A传播到方法B,用户需要面对方法B,问自己一个问题,方法A有事务吗?

propagation_required : 如果没有,就新建一个事务;如果有,就加入当前事务。,属于Spring的默认事务传播行为
propagation_requires_new:如果没有,就新建一个事务;如果有,就将当前事务挂起。就是创建一个新的事务,他和原来的事务没有任何关系了
propagation_nested:如果没有,就新建一个事务,如果有,就在当前事务中潜逃其他事务,也就是所嵌套的子事务与主事务之间是有关联的(当主事务提交或回滚,子事务也会提交或回滚)
propagation_supports:如果没有,就以非事务方式执行;如果有,就使用当前事务。
propagation_not_supported:如果没有,就以非事务方式执行;如果有,就将当前事务挂起,这种方式非常强硬,没有就没有,有也不支持,挂起来,不管他。
propagation_never:如果没有,就以非事务方式执行;如果有,就抛出异常,这种方式更强硬,没有就没有,有了反而报错,从不支持事务
propagation_mandatory:如果没有,就抛出异常,如果有。就是用当前事务。 必须要有事务。

附加功能:
事务超时:
只读事务:

spring事务隔离级别:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
读取未提交数据(会出现脏读, 不可重复读) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)
读取已提交数据(会出现不可重复读和幻读)
@Transactional(isolation = Isolation.REPEATABLE_READ)
可重复读(会出现幻读)
@Transactional(isolation = Isolation.SERIALIZABLE)
串行化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值