spring事务传播特性和隔离级别

43人浏览 / 0人评论
  1. 事务传播属性
    1. REQUIRED:默认级别,如果当前开启事务加入事务,否则开启新的事务;
    2. SUPPORTS:如果当前开启事务则加入事务,否则以非事务方式运行;
    3. MANDATORY:如果当前开启事务则加入事务,没有事务则抛出异常;
    4. REQUIRES_NEW:开启新的事务,如果当前有事务则挂起当前事务;
    5. NOT_SUPPORTED:以非事务方式运行,如果当前有事务则挂起当前事务;
    6. NEVER:以非事务方式运行,如果当前有事务则抛出异常;
    7. NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚
  2. 事务隔离级别
    1. 事务并发出现的三种问题:
      1. 脏读:A事务读取到了B事务未提交的数据,B由于异常回滚导致A读取的数据不存在;
      2. 不可重复读:A事务读取到一条已提交的数据,B事务修改了该数据,A又来读取该数据导致不一致。(A是在同一个事务里多次读取数据)
      3. 幻读:A读取多条符合条件的数据,B插入了一条符合A查询条件的数据,A第二次查询多了一条。(A是在同一个事务里多次读取数据)
    2. 事务隔离级别:
      1. DEFAULT:依赖于数据默认隔离级别
      2. READ_UNCOMMITTED:读未提交,这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。 
      3. READ_COMMITTED:读已提交,保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
      4. REPEATABLE_READ:可重复读,这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读 
      5. SERIALIZABLE:串行,这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 
    3.   脏读 不可重复读 幻读
      READ_UNCOMMITTED
      READ_COMMITTED  
      REPEATABLE_READ    
      SERIALIZABLE      

       

感谢:https://www.cnblogs.com/jimmy-muyuan/p/5722708.html 

全部评论