第十一章 Spring的事务管理

11.1 数据库事务基础知识

Spring 虽然提供了灵活的事务管理功能,但这些功能都是基于底层数据库本身的事物处理机制工作的。

11.1.1何为数据库事务

数据库事务有严格的定义,它必须满足四个特性:原子性、一致性、隔离性和持久性

  • 原子性:表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已执行的任何操作都必须撤销,让数据库返回到初始状态。
  • 一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的,即数据不会被被破坏。
  • 隔离性:在并发数据库操作时,不同的事务拥有不同的数据空间,他们的操作不会对对方产生干扰。准确的说,并非要求做到完全无干扰。数据库规定了事物隔离的级别,不同的隔离级别对应不同的干扰程度,隔离级别越高,数据库一致性越好,但并发性越弱。
  • 持久性:一旦事务提交成功后,事物中的所有数据库操作都必须被持久化到数据库中。
11.1.2 数据库并发问题

一个数据库可能拥有多个访问客户端,这些客户端都可用并发的方式访问数据库。数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏隔离的完整性。

  • 脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。
  • 不可重复读:不可重复读是指A事务读取了B事务已提交更改的数据。(在同一个事务中不同时间点读取的数据不相同)
  • 幻象读:A事务读取B事务提交的新增数据(幻象读是值读取了其他事务提交的新增数据)
  • 第一类丢失更新:A事务撤销时,把已提交的B事务的数据覆盖。
  • 第二类丢失更新:A事务覆盖了B事务已提交的数据
11.1.3数据库锁机制

数据库通过锁机制解决并发访问的问题。
按照锁定的对象不同可以分为表锁定和行锁定。前者对整张表进行锁定,而后者对表中特定的行进行锁定。
从并发事务锁定的关系上看,可以分为共享锁定和独占锁定,共享锁定会防止独占锁定,但允许其他的共享锁定。而独占锁定即防止其他的独占锁定,也防止其他的共享锁定。

11.1.4事务隔离级别

猜你喜欢

转载自blog.csdn.net/u012693119/article/details/75207888