数据库系统概念——事务
参考文档
- 《数据库系统概念》—— 第 14 章 事务 中文第六版 Abraham Silberschatz, Henry E Korth, S. Sudarshan 著,杨冬青、李红燕、唐世渭等译
事务
通常,从数据库用户的观点来看,数据库中的一些操作的集合被认为是一个独立单元。比如,从顾客的立场来看,从支票账户到储蓄账户的资金转账是一次单一的
操作;而在数据库系统中,这是由几个操作组成的。显然,这些操作要么全都发生,发么由于出错而全不发生。资金从支票账户支出而未转入储蓄账户的情况是
不可接受的。
构成单一逻辑工作单元的操作集合称作事务。即使有故障,数据库系统也必须保证事务的正确执行——要么执行整个事务,要么属于该事务的操作一个也不执行。此外,
数据库系统必须以一种能够避免引入不一致性的方式来管理事务的并发执行。
事务概念
事务是访问并可能更新各种数据项的一个程序执行单元。事务通常由高级数据操纵语言或编程语言通过 JDBC 或 ODBC 嵌入式数据库访问书写的用户程序的执行所
引起。事务用形如 begin transaction 和 end transaction 语句来界定。事务由 begin transaction 与 end transaction 之间执行的全体操作组成。
这些步骤集合必须作为一个单一的、不可分割的单元出现。因为事务是不可分割的。所以要么执行其全部内容,要么就根本不执行。因此,如果一个事务开始执行,但
由于某些原因失败,则事务对数据库造成的任何可能的修改都要撤销。无论事务本身是否失败,或者操作系统崩溃,或者计算机本身停止运行,这项要求都要成立。
正如我们看到的,确保这个要求是困难的,因为对数据库的一些修改可能仅仅存在事务的主存变量中,而另一些已经写入数据库并存储到磁盘上。这种 “全或无” 的
特性称为原子性(atomicity)。
数据库系统必须采取特殊处理来确保事务正常执行而不被来自并发执行的数据库语句所干扰。这种特性称为隔离性(isolation)。
即使系统能保证一个事务的正确执行,如果此后系统崩溃,结果系统 “忘记” 了该事务,那么这项工作的意义也不大了。因此,即使崩溃后事务的操作也必须是持久
的。这种特性称为持久性 (durability)。
我们要求数据库系统维护事务有以下性质:
- 原子性:事务的所有操作在数据库中要么全部正确反映出来,要么完全不反映。
- 一致性:隔离执行事务时,保持数据库的一致性
- 隔离性:尽管多个事务可能并发执行,但系统保证,但与任何一对事务 A 和 B,在 A 看来,B 或者在 A 开始之前已经完成执行,或者在 A 完成之后开始执行。
因此,每个事务都感觉不到系统中有其他事务在并发地执行。 - 持久性:一个事务成功完成后,它对数据库的改变必须是持久性的,即使出现系统故障。
这些性质通常称为 ACID 特性。