事务隔离级别与传播行为

目录

三种状况

脏读:

不可重复读:

幻读:

四种隔离级别

七种传播行为


三种状况

脏读:

A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的假数据。  
    例如:A本来没钱,B为A转账1000但是没有提交,A就看到1000并取走,然后B回滚。这是相当严重的问题。


不可重复读:

A事务读取了B事务已经提交的更改数据,B事务执行了修改操作,A再次读取,发现两次不一样。
    假如:A在取款过程中,B往该账户转账200,A取走100后再看余额,发现多了100。


幻读:

A事务读取一个列表时,B事务提交的新增一条数据,A第二次发现多了一条数据。
    幻读一般发生在计算统计数据的事务中,例如银行系统在同一个事务中两次统计一组存款账户的总金额,在两次统计中,刚好新增了一个存款账户,存入了100,这时候两次统计的用户和总金额不一致。 

四种隔离级别

ISOLATION_READ_UNCOMMITTED:读未提交       
ISOLATION_READ_COMMITTED:读已提交
ISOLATION_REPEATABLE_READ:可重复读 
ISOLATION_SERIALIZABLE:串行化

可能会出现的情况

 脏读不可重复读幻读
读未提交✔️✔️✔️
读已提交x✔️✔️
可重复读 xx✔️
串行化xxx

 

 

 

 

 

 

七种传播行为

在Spring中为方法配置事务,依照业务需求去选择。

PROPAGATION_REQUIRED(XML文件中为REQUIRED)

PROPAGATION_SUPPORTS(XML文件中为SUPPORTS)

PROPAGATION_MANDATORY(XML文件中为MANDATORY)

PROPAGATION_NESTED(XML文件中为NESTED)

PROPAGATION_NEVER(XML文件中为NEVER)

PROPAGATION_REQUIRES_NEW(XML文件中为REQUIRES_NEW)

PROPAGATION_NOT_SUPPORTED(XML文件中为NOT_SUPPORTED)
 

传播行为含义
REQUIRED当前方法必须在一个具有事务的上下文中运行,如有调用者有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。
SUPPORTS当前方法不限制是否在事务中运行,有事务则在事务中运行,否则不在。
MANDATORY表示当前方法必须在一个事务中运行,如果没有事务,将抛出异常
NESTED如果当前方法正有一个事务在运行中,则该方法运行在一个嵌套事务中,被嵌套的事务可以独立进行提交或者回滚。如果外层事务抛出异常回滚,那么内层事务必须回滚。如果封装事务不存在,则同REQUIRED的一样
NEVER表示当方法务不应该在一个事务中运行,如果存在一个事务,则抛出异常
REQUIRES_NEW当前方法必须运行在它自己的事务中。一个新的事务将启动,而且如果有一个现有的事务在运行的话,则这个方法将在运行期被挂起,直到新的事务提交或者回滚才恢复执行。
NOT_SUPPORTED表示该方法不应该在一个事务中运行。如果有一个事务正在运行,他将在运行期被挂起,直到这个事务提交或者回滚才恢复执
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值