0
点赞
收藏
分享

微信扫一扫

数据库事物

ZMXQQ233 2022-04-23 阅读 35
java

@Transaction(propagation="REQUIRED")  
  事物的传播特性
  是指多个事物方法在相互调用时,事物如何在这些方法传播(默认是REQUIRED)
  
  1.REQURED
    要求当前事物方法必须在事物中,存在事物则加入事物、没有则创建
 
    SUPPORTS(1),
    MANDATORY(2),    必须在事务中运行,如果当前事务不存在,则会抛出一个异常。不会主动开启一个事务
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4), 不应该运行在事务中,如果存在当前事务,在该方法运行期间,当前事务将被挂起
    NEVER(5),         已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚
    NESTED(6);
    
  2.事物的ACID 特性 
    【1.原子性
    
    【2.隔离型:2个事物的执行都是独立隔离开来的,当多事物操作同一个对象时会以串行等待的方式保证事物之间是隔离开来的
    
    【3.一致性:执行成功则整体成功,不然整体回到事物前的状态
    
    【4.持久性:一旦执行成功,不会丢失
    
  4.事物并发与事物隔离
     事物的隔离是通过锁来实现的,一个事物对数据进行修改时,会对数据加锁,只有该事物提交后,其他事物才能进行加锁
     
     事物并发问题与事物的隔离级别(不同的隔离级别 解决不同问题)
     
     【1.READ_UNCOMMITED, 防止了脏写,事物对数据进行修改时,会加写锁,其他事物无法获取锁阻塞
     
     【2.REDA_COMMITED,防止了脏读,2个事物并发执行,一个修改已经加写锁成功,另一个加读锁(REDA_COMMIt)就会失败则阻塞等待。
                     读锁读取数据结束后就会释放锁(事物还未结束)
     
     【3.REPEATABLE_READ ,防止了不可重发读。在事物并发的时,在一个事物中多次读取数据,多次读取的结果不一样:因为READ_COMMITED 级别下,读取完事物会马上释放读锁;
                        REPEATABLE_READ 在事物结束后才释放锁
                        
     *****前面的写操作,都指的是更新、删除,不包括insert 以为当时是无数据的,没法对还不存在的数据加锁
     
     【4 SERIALIZABLE  防止幻读,因为是insert ,没对表记录加锁,只能锁整张表,所有事物串行执行
                    或间隙锁可以阻止
    
      https://www.cnblogs.com/iullor/p/12434379.html
  
  
  

举报

相关推荐

0 条评论