概述
事务是DBMS中业务操作的执行单位,事务的ACID性质是数据库一致性的基本保证。保障并发执行时事务满足ACID的技术就是数据库的并发控制,保障在数据库发生故障时依然满足ACID的技术就是数据库的故障恢复。并发控制和故障恢复是数据库系统管理的基本内容,所以事务概念和事务ACID性质也就成为了数据库管理的重要基础。
事务概念与性质
我们先来看一个例子:由账户A转账金额X到账户B。这是一个非常经典的例子。这个业务可以分解成2个基本的操作:
- 从A中减少金额X;
- 在B中添加金额X;
这2个动作构成了一个不可分割的整体,要么一起执行,要么都不执行。如果只执行前一个动作而忽略了后一个动作,那么将导致数据错乱。这种“不可分割”的业务单位对于数据库业务的并发控制和故障恢复非常重要、非常必要,这就是“事务”的基本概念。
事务概念
事务(transaction),是DBMS中的基本执行单位。根本特征在于集中了数据库应用方面的若干操作,这些操作构成一个操作序列,要么全做,要么全不做,整个序列是一个不可分割的“原子化”单位。
在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。
事务性质
在数据库事务处理过程中,事务的正常状态是由“ACID”性质予以保证的。
- 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性(Isolation):多个事务并发执行与这些事务单独执行的结果“等效”。当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的相互关系。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。
事务操作与状态
在数据库运行过程中,事务可以由下述的4个基本部分组成:
- 开始(begin):开始执行事务。
- 执行(read and write):事务对数据进行读或写操作。
- 提交(commit):事务完成所有操作,同时保存结果,标志着事务的成功完成。
- 回滚(rollback):事务未完成所有所做,重新返回到事务开始,标志着事务的撤销。
根据事务的上述操作,可以得到事务的各种状态:
- 活动状态(active):事务处于运行当中。
- 局部提交状态(partial committed):表明事务的最后语句已经被执行。
- 提交状态(committed):事务执行成功,执行结果写入到数据库中。
- 失败状态(failed):事务无法正常进行。
- 终止状态(abort):回到事务执行前的初始状态。
可以得出以下结论:
- 事务一般由“事务开始”启动,到“事务提交”或“事务回滚”结束。
- 在事务开始后,它不断做READ或WRITE操作,但此时WRITE操作仅将数据写入磁盘缓冲区,并不是真正写入到数据库中。
- 在事务执行过程中会产生2种情况:一是顺利执行,此时事务继续执行其后的操作;二是产生故障等原因而终止。
SQL事务机制
事务处理语句
- 事务开始语句:
BEGIN TRANSACTION
. - 事务提交语句:
COMMIT TRANSACTION
. - 事务回滚语句:
ROLLBACK TRANSACTION
. - 事务存储点语句:
SAVE TRANSACTION
,RELEASE TRANSACTION
.