JAVA中的事务

本文介绍了JAVA中的事务,包括事务的ACID特性,Spring的七种事务传播行为,事务隔离级别的查询与设置,以及探讨了可能导致Spring事务失效的原因。同时,详细阐述了在SpringMVC中配置事务的两种方法:注解方式和AOP切面实现。
摘要由CSDN通过智能技术生成

事务

  1. 什么是事务

        事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败,不可能存在部分成功的情况;事务是一个最小的不可再分割的工作单元,通常来说一个事务对应一个完整的业务;只有对数据库进行操作时(DML)才会有事务(不包括查询select)。
    
  2. 事务的四大特性(简称‘ACID’)

    *原子性(Atomicity)
    	事务中所有操作是不可再分割的原子单位。一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。
    *一致性(Consistency)
     	事务执行后,数据库状态与其他业务规则保持一致(即在事务处理执行前后,数据库是一致的)。
    *隔离性(Isolation)
     	隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰,即一个事务处理对另一个事务处理没有影响。
    *持久性(Durability)
     	一旦事务提交成功,事务中所有的数据库操作都必须被持久化到DB中,即便系统遇到故障的情况下,数据也不会丢失。【内存中的数据持久到硬盘文件中】
    
  3. Spring事务的七种传播行为:

    由@Transaction(Propagation=XXX)设置决定:
    事务传播行为类型:	         说明:
    
    PROPAGATION_REQUIRED	    如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这                       是最常见的选择。
    
    PROPAGATION_SUPPORTS	    支持当前事务,如果当前没有事务,就以非事务方式执行。
    
    PROPAGATION_MANDATORY	    使用当前的事务,如果当前没有事务,就抛出异常。
    
    PROPAGATION_REQUIRES_NEW	新建事务,如果当前存在事务,把当前事务挂起。
    
    PROPAGATION_NOT_SUPPORTED	以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    
    PROPAGATION_NEVER	        以非事务方式执行,如果当前存在事务,则抛出异常。
    
    PROPAGATION_NESTED	        如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与                                     PROPAGATION_REQUIRED类似的操作。
    
    
  4. 事务的隔离级别

    第一级别:读未提交 read uncommitted
    	- 事务A和事务B,事务A未提交的数据,事务B可以读取到。	
    	- 这里读取到的数据可以叫做“脏数据”或者叫做“Dirty Read”。
    	- 这种隔离级别是最低级别,这种级别一般都是理论上存在的,数据库默认的隔离级别一般都是高于该隔离级别的。
    第二级别:读已提交 read committed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值