事务的隔离级别和传播行为

一、事务的隔离级别

1.五种事务的隔离级别

  ①读_未提交(read_uncommitted): 会出现脏读、不可重复读、幻读。(隔离级别最低,并发性能高)

  ②读_已提交(read_committed):会出现不可重复读、幻读。(锁定正在读取的行)

  ③重复读(repeatable_read):会出现幻读。(锁定所读取的所有行)

  ④序列化(serializable):保证所有的情况不会发生;(锁表)

  ⑤默认的隔离级别:

    大多数的默认隔离级别是:读已提交(read_commited)如:Sql Server Oracle.

    少数的数据库的默认隔离级别为:可重复读(Repeatable Read)如:MySQL InnoDB存储引擎;

注意:即使是最低的隔离级别,也不会出现第一类丢失更新的问题;

2.不同的事务隔离级别带来的问题的详解

  ①脏读(事务没有提交,提前读取),像是对表进行了更改操作,但是还没commit;其他事务就来读取使用了所修改的对象了;

  ②不可重复读(两次读的不一致),是指当一个事务在两次读一个数据的中间,读完第一次后其他的事务对该数据进行了修改,造成第一个事务两次读取的结果不一样;

  ③幻读(是在一个事务对整个表进行修改的时候,另一个事务对该表进行了修改,第一个事务再次读该表的时候的发现竟然还有没有被修改的数据)主要是有事务进行了突然的新增或者删除,造成两次读出来的数据的记录数不一样了;

  注意:不可重复读和幻读的区别是,不可重复读指的是有其他事务对数据进行了修改,造成两次读的值不一样;而幻读指的是其他事务对所读的数据的个数进行了修改也就是发生的插入和删除,这样在数据记录的个数上发生了改变;

二、事务的传播行为

  1.Spring中定义的7种事务传播行为

  ①PROPAGATION_REQUIRED

  如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中;

  ②PROPAGATION_SUPPORTS

  支持当前事务,如果当前没有事务,就以非事务方式执行;

  ③PROPAGATION_MANDATORY

  使用当前的事务,如果当前没有事务,就抛出异常;

  

  ④PROPAGATION_REQUIRES_NEW

  新建事务,如果当前存在事务,把当前事务挂起;

  ⑤PROPAGATION_NOT_SUPPORTED

  以非事务方式执行操作,如果当前存在事务,就把当前事务挂起;

  ⑥PROPAGATION_NEVER

  以非事务方式执行,如果当前存在事务,则抛出异常;

  ⑦PEOPAGATION_NESTED

  如果当前存在事务,则在潜逃事务内执行。如果当前没有事务,则执行PROPAGATION_REQUIRED列斯的操作;

时间: 2025-01-05 14:31:13

事务的隔离级别和传播行为的相关文章

事务的隔离级别和传播特性

脏读:当一个事务读取另一个事务未提交的内容,之后由于另一个事务出现了异常回滚了事务,结果造成读取的数据不一致 不可重复读:指一个事务多次读取同一数据,而另一个事务多次对数据进行了修改的操作,这样就导致了第一个事务每次读取的数据不一样, 幻读:当事务一对整张表的数据进行操作时对其进行了新增行,而另一个事务对其进行了删除行,而这时事务一本身对其进行了新增行然而发现并没有对其新增行而产生了幻觉 脏读与不可重复读的区别:脏读是对没有提交的数据进行查询,不可重复读是对已经提交的数据进行的查询 不可重复读与

实战分析:事务的隔离级别和传播属性

什么是事务? 要么全部都要执行,要么就都不执行. 事务所具有的四种特性 原子性,一致性,隔离性,持久性 原子性 个人理解,就是事务执行不可分割,要么全部完成,要么全部拉倒不干. 一致性 关于一致性这个概念我们来举个例子说明吧,假设张三给李四转了100元,那么需要先从张三那边扣除100,然后李四那边增加100,这个转账的过程对于其他事务而言是无法看到的,这种状态始终都在保持一致,这个过程我们称之为一致性. 隔离性 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据是独立的: 持

Spring事务隔离级别和传播特性

在Spring中,声明式事务是用事务参数来定义的.一个事务参数就是对事务策略应该如何应用到某个方法的一段描述,如下图所示一个事务参数共有5个方面组成: 传播行为 事务的第一个方面是传播行为.传播行为定义关于客户端和被调用方法的事务边界.Spring定义了7中传播行为. 传播行为 意义 PROPAGATION_MANDATORY 表示该方法必须运行在一个事务中.如果当前没有事务正在发生,将抛出一个异常 PROPAGATION_NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌

数据库事务隔离级别及传播行为

一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. 1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据.      这种隔离级别会产生脏读,不可重复读和幻像读.2. ISOLATION_READ_COMMITTED:保证一个事务修改的

数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执

事务隔离级别、传播行为及锁机制

1.事务的特性 事务具备以下四个特性,简称ACID属性. 原子性(Atomicity): 事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行. 一致性(Consistency): 当事务完成时,数据必须处于一致的状态. 隔离性(Isolation): 并发事务之间相互独立.隔离,它不应以任何方式依赖于或影响其他事 务. 持久性(Durability): 事务完成后,它对数据库的修改被永久保持. 2. 事务的隔离级别 ① Read uncommitted (读未提交):

事物的隔离级别和传播属性

1.ACID:原子性.一致性.隔离性.持久性 2.事务:显示,隐士事物 3.不一致性: 更新丢失(覆盖了).脏读(读取到了未提交的数据).不可重复读(两次读取的结果不一致) 4. 四个隔离级别:--主要保证查询时最新的 READ UNCOMMITTED --不申请X锁与S锁 READ COMMITTED     --申请S锁 REPEATABLE READ    --锁定查询结果,这样其他事务不可以更新查询到的结果数据 SERIALIZABLE           --数据集上放置一个范围锁 七

数据库隔离级别以及传播行为

一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. 1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据.      这种隔离级别会产生脏读,不可重复读和幻像读.2. ISOLATION_READ_COMMITTED:保证一个事务修改的

数据库事务的隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个