您的位置:首页 > 其它

事务的ACID特性

2017-11-14 20:57 302 查看
事务的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)

串行化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: