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

1. 事务的四大特性

  1. 原子性(Atomicity):事务不可再分,要么都执行,要么都不执行。
  2. 一致性(Consistency):事务执行前后,数据的完整性保持一致,即修改前后数据总量是一样的大概。
  3. 隔离性(Isolation):一个事务执行过程中,不会受到其他事务干扰。
  4. 持久性(Durability):事务一旦结束,对数据库的影响是永久的。数据持久化到数据库中。

在并行程序中可能会出现的问题

  1. 脏读:当 A事务 读取 B事务 未提交的数据后,B事务 回滚,导致 A事务 读取到的数据为脏数据。
  2. 不可重复读:A事务 读取第一次读取数据后,B事务 对该数据进行了修改并提交,A事务 再去读取数据时,前后数据结果不一致。
  3. 幻读:A事务 读取第一次读取数据后,B事务 又插入或删除了新的数据并提交,A事务 再去读取数据时,前后结果不一致。

2. Spring事务的五个隔离级别

  1. ISOLATION_DEFAULT:使用数据库默认的事务隔离级别。
  2. ISOLATION_READ_UNCOMMITTED:事务最低的隔离级别,允许一个事务可以读取另一个事务未提交的数据。 会产生脏读、不可重复读和幻读。
  3. ISOLATION_READ_COMMITTED: 保证一个事务只能读取另一个事务修改并提交后的数据,不能读取未提交的数据。防止脏读。
  4. ISOLATION_REPEATABLE_READ:保证一个事务不能更新另一个事务修改但尚未提交的数据。可以避免脏读和不可重复读。
  5. ISOLATION_SERIALIZABLE:序列化执行所有事务。都避免了,但是效率极低。

3. Spring事务的七个传播行为

在同一个事务中:

  1. PROPAGION_REQUIRED(默认):支持当前事务,不存在则创建一个新的事务。
  2. PROPAGION_SUPPORTS:支持当前事务,不存在就以非事务方式运行。
  3. PROPAGION_MANDATORY:支持当前事务,如果不存在,抛出异常。

不同事务中:

  1. PROPAGIN_REQUIRES_NEW:当前存在事务则挂起,创建一个新事务。
  2. PROPAGION_SUPPORTS:当前存在事务则挂起,以非事务方式运行。
  3. PROPAGION_NEVER:当前存在事务抛出异常,非事务方式运行。
  4. PROPAGION_NESTED:当前存在事务则嵌套事务执行。

你可能感兴趣的:(学习问题,自用,spring,java,数据库)