事务的4大特性、隔离级别、传播机制

一、4大特性(ACID)

  • 原子性(A):在一个事务中,要么全部成功,要么全部失败。
  • 一致性(C):事务完成时,所有数据都保持一致的状态,例如:在银行转账,A向B转1000,A扣1000,B加1000要一起成功或失败。
  • 隔离性(I):多个事务的执行是互不干扰的。
  • 持久性(D):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

参考: 事务的4大特性、事务隔离级别、事务传播行为

二、隔离级别

  • 读未提交(脏读)
    • 其他事务还没提交,但是当前事务已经读到了被修改的数据
    • 由于可以读到其他未提交事务提交的数据,所以叫做脏读。
  • 读已提交(不可重复读)
    • 当前事务还没提交,但是可以读到其他已经提交的事务修改的数据
    • 由于可以读到其他事务已提交的数据,所以两次查询可能会产生不一样的结果。
  • 可重复读(幻读)
    • 如果事务A和事务B都在进行中,事务A在数据库中插入了一条主键为1的一条数据,并且结束事务;然后事务B查询数据库中不存在主键为1的数据,所以再次执行插入操作,发现逐渐冲突,这种现象类似于幻读
    • 由于事务只要不结束,多次查询的结果都是一样的,这就是可以重复读。
  • 串行化:事务排队执行,每次执行一个。

参考: 事务的4大特性、事务隔离级别、事务传播行为

三、传播机制

  • required(默认):如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务
  • requires_new:创建一个新事务,如果存在当前事务,则挂起该事务。
  • supports:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行
  • mandatory:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常。
  • not_supported:始终以非事务方式执行,如果当前存在事务,则挂起当前事务
  • never:不使用事务,如果当前事务存在,则抛出异常
  • nested:如果当前事务存在,则在嵌套事务中执行,否则自己新建一个事务
    • 和requires_new的区别:requires_new是新建一个事务并且新开启的这个事务与原有事务无关,而nested是当前存在事务时(我们把当前事务称之为父事务)会开启一个嵌套事务(称之为一个子事务)。在nested情况下父事务回滚时,子事务也会回滚,而在requires_new情况下,原有事务回滚,不会影响新开启的事务。
    • 和required的区别:required情况下,调用方存在事务时,则被调用方和调用方使用同一事务,那么被调用方出现异常时,由于共用一个事务,所以无论调用方是否catch其异常,事务都会回滚;而在nested情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不受影响。

参考: 带你读懂Spring 事务——事务的传播机制

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务是指一组操作被视为一个单独的工作单元,并且要么全部完成,要么全部撤销。事务具有以下四个基本特性: 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部失败回滚,不允许只执行其中一部分操作。 2. 一致性(Consistency):事务执行前后,系统的数据状态必须保持一致。 3. 隔离性(Isolation):事务之间是相互隔离的,一个事务执行过程中,其对数据库的修改在提交前,对其他事务是不可见的。 4. 持久性(Durability):事务一旦提交,它对数据库的修改就是永久性的,即使系统崩溃也不会丢失。 事务隔离级别是指多个并发事务之间的隔离程度,包括以下四种级别: 1. 读未提交(Read Uncommitted):一个事务还没有提交时,它做的修改就能被其他事务看到。 2. 读已提交(Read Committed):一个事务提交后,它的修改才能被其他事务看到。 3. 可重复读(Repeatable Read):一个事务执行期间,多次读取同一个数据,读到的数据始终保持一致。 4. 串行化(Serializable):所有事务按照顺序一个一个执行,不存在并发问题。 事务传播机制是指在一个事务中调用其他事务时,它们之间的关系。主要有以下四种传播机制: 1. REQUIRED:默认传播机制,如果当前没有事务,则新建一个事务,如果已经存在事务,则加入该事务。 2. REQUIRES_NEW:每次都会新建一个事务,如果当前存在事务,则挂起该事务,等新事务执行完毕后再恢复。 3. SUPPORTS:如果当前存在事务,则加入该事务,如果没有事务,则以非事务方式执行。 4. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起该事务,等非事务执行完毕后再恢复。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值