mysql数据库事务隔离级别以及Spring中事务隔离级别的设置问题

mysql数据库,当且仅当引擎是InnoDB,才支持事务;

1、隔离级别

事务的隔离级别分为:未提交读(read uncommitted)、已提交读(read committed)、可重复读(repeatable read)、串行化(serializable)。

未提交读

A事务已执行,但未提交;B事务查询到A事务的更新后数据;A事务回滚;---出现脏数据

已提交读

A事务执行更新;B事务查询;A事务又执行更新;B事务再次查询时,前后两次数据不一致;---不可重复读

可重复读

A事务无论执行多少次,只要不提交,B事务查询值都不变;B事务仅查询B事务开始时那一瞬间的数据快照;

扫描二维码关注公众号,回复: 8699583 查看本文章

串行化

不允许读写并发操作,写执行时,读必须等待;

》》》查看当前事物级别:

SELECT @@tx_isolation; 
》》》设置read uncommitted级别: 
set session transaction isolation level read uncommitted; 
》》》设置read committed级别: 
set session transaction isolation level read committed; 
》》》设置repeatable read级别:
set session transaction isolation level repeatable read; 
》》》设置serializable级别: 
set session transaction isolation level serializable;

Spring中如何设置事务隔离级别

@Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED) public class DefaultFooService implements FooService {   
          public void getSomething(Foo foo) {     
         // do something  
 }   
//方法上注解属性会覆盖类注解上的相同属性   
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)   public void updateFoo(Foo foo) {   
   // do something  
} }

1、Isolation :隔离级别

隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。

我们可以看 org.springframework.transaction.annotation.Isolation 枚举类中定义了五个表示隔离级别的值:

public enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8); }

2、Propagation:传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。

我们可以看 org.springframework.transaction.annotation.Propagation 枚举类中定义了6个表示传播行为的枚举值:

public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4), NEVER(5), NESTED(6); }

REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 

SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 

MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 

REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。 

NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。 

NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。 

NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。 

发布了28 篇原创文章 · 获赞 3 · 访问量 7419

猜你喜欢

转载自blog.csdn.net/weixin_39076203/article/details/102626905