事务的详解

什么是事务?

       数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作座位一个整体一起向系统提交,要么都执行,要么都不执行事务是一组不可在分割的操作集合

      1.1 四种事务特性

事务特性描述
原子性强调事务不可再分,要么全部成功,要么失败回滚
一致性事务执行前后数据完整性保持一致
隔离性一个事务执行过程中,不受其他事物影响
持久性事务一旦结束,就持久化到数据库

 

      1.2 五种事务隔离级别

      脏读:还未提交的数据,非数据库存在的数据

      不可重复度:数据由于对所有事务可见,导致多次查询期间值可能改变导致查询结果不一致

      幻读:一个事务在查询之后,另一个事务提交的新的数据,导致上一个事务无法感知这条数据

事务隔离级别描述
ISOLATION_DEFAULT采用数据库默认的隔离级别
ISOLATION_READ_UNCOMMIT是事务的最低级别,允许一个事务读取另一个事务未提交的数据,会产生脏读、不可重复读和幻读
ISOLATION_READ_COMMIT事务只会读取已提交的数据,但是会产生不可重复读和幻读
ISOLATION_REPEATABLE_READ确保事务可以多次从一个字段中读取相同的值,在事务执行期间,禁止其他事务对该字段进行修改,会产生幻读
ISOLATION_SERIALIZABLE效率最低但最可靠的事务级别,保证事务按顺序执行

      1.3 七种事务的传播行为

事务传播行为类型说明
PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

      1.4 REQUIRED、NESTED、REQUIRED_NEW的区别

      NESTED 和 REQUIRED 修饰的内部方法都属于外围方法事务,如果外围方法抛出异常,这两种方法的事务都会被回滚。但是 REQUIRED 是加入外围方法事务,所以和外围事务同属于一个事务,一旦 REQUIRED 事务抛出异常被回滚,外围方法事务也将被回滚。而 NESTED 是外围方法的子事务,有单独的保存点,所以 NESTED 方法抛出异常被回滚,不会影响到外围方法的事务。

      NESTED 和 REQUIRES_NEW 都可以做到内部方法事务回滚而不影响外围方法事务。但是因为 NESTED 是嵌套事务,所以外围方法回滚之后,作为外围方法事务的子事务也会被回滚。而 REQUIRES_NEW 是通过开启新的事务实现的,内部事务和外围事务是两个事务,外围事务回滚不会影响内部事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值