Skip to content

深入理解数据库事务

Published: at 05:03 AM

定义

事务(Transaction)在计算机术语中是数据库管理系统执行过程中的一个由一个有限的数据库操作序列构成的逻辑单位。 在数据库中以一致模式完成的任何逻辑计算都称为事务。

性质

数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:

  1. 提供可靠的工作单元,可以从故障中正确恢复并保持数据库一致,即使在系统故障的情况下(执行停止(完全或部分)并且对数据库的许多操作仍未完成且状态不明时)。
  2. 提供并发访问数据库的程序之间的隔离,以防止彼此的操作互相干扰。如果没有提供这种隔离,程序的结果可能是错误的。

当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

ACID 特性

根据定义,数据库事务必须是原子的(它必须是完整的或没有任何影响)、一致的(它必须符合数据库中现有的约束)、隔离的(它不能影响其他事务)和持久的(它必须写入持久存储)。数据库从业者经常使用首字母缩写词 ACID 来指代数据库事务的这些属性。

示例

张三要在商店购买 100 元的东西,当中至少包括两个操作:

  1. 张三账户减少 100 元
  2. 商店账户增加 100 元

原子性:

数据库管理系统就要确保以上两个操作(整个“事务”)都能完成,或一起取消;否则就会出现 100 元平白消失或出现的情况。

一致性:

交易完成,张三账户减少 100 元,商店账户增加 100 元

交易失败,张三账户和商店账户不变

隔离性:

如果张三在支付的同时,李四也在支付(是 50 元),那么即使李四取消支付,只要张三支付成功,商店账户也会增加 100 元,即不会影响张三的支付。

持久性:

交易完成,二者账户变化生效(写入数据库)

参考

http://www.hollischuang.com/archives/898

https://zh.wikipedia.org/wiki/数据库事务

https://en.wikipedia.org/wiki/Database_transaction