Bootstrap

同一个事务里面对同一条数据做2次修改_Spring事务管理,快速入门

70d75346a67ba223238d179259143014.png

原创: 微笑面对生活


说起事务,大家应该多多少少用过,尤其是在一个service方法中调用多次dao操作,我们一定要用到事务( @Transational注解),那么这个事务的默认隔离级别和传播机制是什么呢?

先来讲讲 脏读 不可重复读 和 幻读。

  1. 脏读:我们在并发编程中是很熟悉的,通俗的讲就是你读得数据已经被修改了,已经过时失去意义了。
  2. 不可重复读: 同一个事务里面多次读取同一行数据,却返回不同的结果。
  3. 幻读:同样一笔查询在整个事务过程中多次执行后,查询所得的结果集不一样。

事务四大特性 ACID

1. 原子性 (Atomicity)

要求事务所包含的全部操作是一个不可分割的整体,如果有一步发生异常,则全部不提交。

2. 一致性 (Consistency)

A给B转钱,A减和B增这两个操作必须保持一致。

3. 隔离性 (Isolation)

事务会将一部分数据与其他事务隔离,防止脏读等。

4. 持久性 (Durability)

事务的结果被写到持久化存储器中。

事务四大隔离级别

隔离级别越高,则性能相对越低,反之亦然。1. Read Uncommitted最低的隔离级别,跟你直译的意思一样:可以读取其它事务未完成的结果。(脏读)

很明显, 脏读 不可重复读 和 幻读这三个问题它都有。

2. Read Committed

大部分数据库采用的 默认隔离级别,比上一个隔离级别多了限定:在该事务完成后,才能读取该事务的数据更新后的结果。

它可以避免脏读,但是也有不可重复读取和幻读的问题。

3. Repeatable Read</

;