事务特性、事务传播属性、数据库隔离级别

事务的4个特性

1、原子性(atomicity):事务是一个原子操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用。

2、一致性(consistency):一旦所有事务的动作完成,事务就被提交,数据和资源就处于一种满足业务规则一致状态中。

3、隔离性(isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。

4、持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。通常情况下,事务的结果被写到持久化存储器中。

事务传播属性
  • 当事务被方法的另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新的事务,并在自己的事务中运行。

  • 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。

    传播属性描述
    REQUIRED如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行。
    REQUIRED_NEW当前的方法必须启动新事务,并在他自己的事务内运行,如果有事务正在运行,应该将他挂起。
    SUPPORTS如果有事务正在运行,当前的方法就在这个事务内运行,否则他可以不运行在事务中。
    NOT_SUPPORTED当前的方法不应该运行在事务中。如果有运行的事务,将他挂起。
    MANDATORY当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常。
    NEVER当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。
    NESTED如果有事务正在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行。
数据库事务隔离级别
隔离级别描述
READ UNCOMMITTED(读未提交)事务中最低的级别。在该级别下的事务可以读取到另一个事务中未提交的数据,被称为脏读(Dirty Read)
READ COMMITTED(读提交)在该级别下的事务只能读取其他事务已经提交的内容,可避免脏读但不能避免重复读和幻读的情况
REPEATABLE READ(可重复读)MySQL默认的事务隔离级别它可以避免脏读和不可重复读。
DEFAULT默认隔离级别,每种数据库支持的事务隔离级别不一样,如果Spring配置事务时将isolation设置为这个值的话,那么将使用底层数据库的默认事务隔离级别
SERIALIZABLE(可串行化)是事务的最高隔离级别,它会强制对事务进行排序,使之不会发生冲突,从而解决脏读、幻读、重复读的问题。但是,该级别可能导致大量的超时现象和锁竞争,实际应用中很少使用。

在这里插入图片描述

重复读就是在事务内重复读取别的线程已经提交的数据时读取的结果不一致。导致该问题的原因是查询的过程中其它事务做了更新操作。

幻读是指在一个事务内两次查询中数据条数不一致。导致该问题的原因是查询的过程中其它的事务做了添加操作。

脏读在该级别下的事务可以读 取到另一个事务中未提交的数据也被称为脏读(Dirty Read)。

不可重复读是指事务中两次査询的结果不一致,原因是在査询的过程中其它事务做了更新等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值