在理解事务的概念之前,接触数据库系统的其他高级特性还言之过早。

事务的定义

用一个具体的事例来引入事务的概念再合适不过。银行应用是解释事务必要性的一个经典案例。银行的数据库有支票表储蓄表两张表。现在需要从Jim的支票账户中转移200刀到其储蓄表,那么需要三个步骤。

  1. 检查支票账户的余额高于200刀。
  2. 支票账户余额中减去200刀。
  3. 储蓄账户中增加200刀。

上述的步骤的操作必须打包在一个事务中,任何一个步骤失败,都必须要回滚所有的步骤。

看完上述用例,我们理解事务的定义应该会轻松明确很多:数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

事务的ACID

事务的ACID代表事务必备的四个标准特征。即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)。下面我们来逐一学习一下这四大特性。

原子性

一个事务必须被视为一个不可分割的最小工作单元。整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

一致性

数据库总是从一个一致性的状态转换到另一个一致性的状态。在银行应用的案例中,在确保了一致性后,即使执行到2、3步之间系统崩溃了,支票账户也不会损失200刀,因为事务最终没有提交,所以事务中所做的所有修改都不会保存到数据库中。

隔离性

通常来说一个事务提交的修改在最终提交前对于其他事务是不可见的。在上述例子的2、3步之间,如果有另外一个账户汇总程序开始运行,看到的支票账户应该没有被剪去200刀。隔离级别这一相关的概念是之后的需要进一步了解的重点内容。

持久性

一旦事务提交,其所做的修改就会永久保存到数据库中。此时就算系统崩溃,修改的数据也不会丢失。持久性这个概念其实相对比较模糊,而且持久性也分很多不同的级别。

小结

事务的ACID是学习数据库事务这一重要特性的基础,在实际的生产应用中,ACID更是保证数据库正确工作的基础。尤其ACID中的隔离性,每一个服务端研发人员都应该对其有更深入的认知。

参考图书

《高性能MySQL》第一章

最后修改:2020 年 09 月 25 日 05 : 34 PM