事务的特性

原子性 Atomicity

原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
默认情况下一条SQL就是一个单独事务,事务是自动提交的。只有显式的使用start transaction开启一个事务,才能将一个代码块放在事务中执行。

一致性 Consistency

一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。保障机制(也从两方面着手):数据库层面会在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,check约束等)和触发器设置;此外,数据库的内部数据结构(如 B 树索引或双向链表)都必须是正确的。业务的一致性一般由开发人员进行保证,亦可转移至数据库层面。

隔离性 Isolation

多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

持久性 Durability

意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。(完成的事务是系统永久的部分,对系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持)

事务的概念

原子性、隔离性、一致性和持久性,简称为ACID,需要保证ACID的一个或者多个数据库操作称为事务

事务有5中状态

  • 活动的(active):事务对应的数据库操作正在执行的过程中,事务处于活动状态
  • 部分提交的 (partially committed):当事务中的最后一个操作执行完成,但由于操作都在内寸中执行,所造成的影响并没有刷新到磁盘时,称为部分提交的状态
  • 失败的(failed):当事务处于活动的或者部分提交的状态时,遇到了某些错误二无法继续执行,或者人为停止了当前的事务执行,称为失败的状态
  • 种植的 (aborted):如果事务执行了半截而变为失败的状态,需要执行回滚操作,恢复执行事务之前的状态,该事务处于中止的状态。
  • 提交的(committed): 当一个处于部分提交的状态的事务将修改过的数据都刷新到磁盘中之后,该事务处于提交状态

事务状态转换

最后修改:2022 年 07 月 10 日
如果觉得我的文章对你有用,请随意赞赏