5.3.1 事务的基本概念

5.3.1 事务的基本概念

事务是由一系列的SQL语句组成的一个数据库操作序列,而这些操作是一个不可分割的逻辑工作单元。如果事务成功执行,那么该事务中所有的更新操作都会成功执行,并将执行结果提交到数据库中,成为数据库永久的组成部分。若事务中任何一条SQL语句执行操作失败,则事务所有操作均被撤销。如银行储蓄客户到银行办理取款业务,将完成4步操作:

①输入正确的密码。

②减少储户剩余货币金额。

③生成取款流水记录存入数据表。

④取到设定的货币。

这四步任何一步出现错误,则整个交易过程全部回到取款的最初状态,只有四个步骤顺利完成,储户才能成功取到货币。

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,数据库能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。

事务通常是以begin transaction开始,以commit或rollback结束。commit表示提交,即提交事务的所有操作。具体地说,就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。

rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始的状态。

事务必须具备4个原则,即所谓的ACID的特性。

(1)原子性(Atomicity)

事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。

(2)一致性(Consistency)

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此,当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。一致性与原子性是密切相关的。

(3)隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启事务,多个并发事务之间要相互隔离。一个事务的执行不能被其他事务干扰。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。即不能被其他事务的操作所干扰。

(4)持续性/永久性(Durability)

一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。如遇到突发情况,事务能够保证在服务器重启后仍是完整的。