spring事务管理

48 阅读5分钟

1. 认识事务本身

事务就是以可控的方式对数据资源进行访问的一组操作。为了保证事务执行前后,数据资源所承载的系统状态始终处于 “正确” 状态,事务本身持有4个限定属性 ,即原子性 ( Atomicity )、一致性(Consistency )、隔离性 (Isοlation ) 和持久性 ( Durability ),这也就是常说的事务的ACID属性。

  • 原子性

原子性要求事务所包含的全部操作是一个不可分割的整体.这些操作要么全部提交成功 ,要么只要其中一个操作失败,就全部失败 如果把整个事务的操作比作 “钢七连” ,那么我们的口号就得从 “不抛弃,不放弃” 改成 “要么不抛弃,要么就全部放弃” 了。

  • 一致性

一致性要求事务所包含的操作 不能违反数据资源的一致性检查 ,数据资源在事务执行之前处于某个数据一致性状态,那么,事务执行之后也依然需要保持数据伺的一致性状态 。对于一个证券系统来 说,如果顾客的银行账户和证券账户资金总和为 10万元的话 (银行账户初始8万元,证券账户初始2万 元〉, 从银行账户的8万元转账5万元到证券账户的事务操作结束之后 ,银行账户会剩余3万元,证券 账户为7万元,两个账户的总和依然是10万元 如果事务操作结束后 ,’喜个数据状态不是这个样子, 那么就说系统处于不一致状态。使用事务的其中一个目的,就是为了避免这种不一致性状态的产生。

  • 隔离性

事务的隔离性主要规定了各个事务之间相互影响的程度。隔离位概念主要面向对数据资源的并发访问(Concurrency),并兼顾影响事务的一致性 当两个事务或者更多事务同时访问同一个数据资源的时候,不同的隔离级别决定了各个事务对该数据资源访问的不同行为。

如果不出意外 ,我们可以为事务指定4种类型的隔离级别 ,隔离程度从弱到强分别为 Read Uncommitted、Read Committed 、Repeatable Read和Serializable。

  • Read Uncommitted。它是最低的隔离级别。Read Uncommitted最直接的效果就是,一个事务可以读取另一个事务没有提交的更新结果。Read Uncommitted 是以较低的隔离度来寻求较高的性 能,其本身无法避免以下几个问题。

    • 脏读。如果一个事务对数据进行了更新,但事务还没有提交,另一个事务就可以 “看到” 该事务没有提交的更新结果。这样造成的问题就是,如果第一个事务回滚 那么第二个事务在此之前所 “看到” 的数据就是一笔脏数据。

    • 不可重复读取。不可重复读取是指同一个事务在整个事务过程中对同一笔数据进行读取 ,每次读取结果都不同 。如果事务1在事务2的更新操作之前读取 一次 数据,在事务2的更新操作之后再读取同一笔数据一次,两次结果是不同的所以,Read Uncommitted也无法逃免不可重复读取的问题。

    • 幻读(Phantom Read)。幻读是指同样一个查询在整个事务过程中多次执行后,查询所得的结果集是不一样的。幻读针对的是多笔记录。在Read Uncommitted 隔离级别下,不管事务2的插入操作是否提交,事务1在插入操作之前和之后执行相同 的查询,取得的结果集是不同的,所以,Read Uncommitted 同样无法避免幻读的问题。

  • Read Committed。通常,Read Committed是大部分数据库采用的默认隔离级别,它比Read Uncommitted削隔离级别拥有更高级别的限定。在该隔离级别下,一个事务的更新操作结果只有在该事务提交之后,另一个事务才可能读取到同一笔数据更新后的结果。所以,Read Committed可以避免Read Uncommitted制隔离级别下存在的脏读问题,但是无法避免不可重复读取和幻读的问题

  • Repeatable Read. Repeatable Read隔离级别可以保证在整个事务的过程中,对同一笔数据的读取结果是相同的,不管其他事务是否同时在对同一笔数掘进行更新 ,也不管其他事务对同一笔数据的更新提交与否。Repeatable Read隔离级别避免了脏读和不可重复读取的问题,但是无法避免幻读。

  • Serializable. 它是最为严格的隔离级别。所有的事务操作都必须依次顺序执行 ,可以避免其他隔离级别遇到的所有问题,是最为安全的隔离级别 但同时也是性能最差的隔离级别,因为在该隔离级别下,所有的事务都需要依次顺序执行,所以,并发度下降 ,吞吐量上不去性能自然就下来了 。因为该隔离级别极大影响系统性能 ,所以,很少场景会使用它。通常情况下,我们会使用其他隔离级别加上相应的并发锁的机制来控制对数据的访问,这样既保证了系统性能不会损失太大,也能够在一定程度上保证数据的一致性。

  • 持久性

2.事务的传播行为