如果要执行一系列的操作,而这些操作最终是以整体的原子操作的形式完成的话,事务就是必须的。关于事务的理论中,银行转账问题是最经典的例子:当把钱从一个银行帐号转移至另外一个银行帐号的时候,这个操作要由两个步骤来完成,首先要将资金从一个银行帐号取出,然后再将其存入另一个银行帐号。如果资金已经从一个银行帐号取出了,在将资金存入另一个银行帐号之前或者进行当中发生异常情况(包括程序内部异常、服务器当机、目标帐号被冻结),如果没有事务保护就会出现源帐号中的资金已经减少了,但是目标帐号中的资金并没有增加的状况。
事务是关键业务系统开发中非常关键性的服务,对于关键性业务系统如果没有采用事务,那么这个系统可以说是不可用的。
- 事务简介
从严格的定义来讲“事务是形成一个逻辑工作单位的数据库操作的汇集”。通俗的说,事务(Transaction)是能以整体的原子操作形式完成的一系列操作,事务能保证一个“全有或者全无”的命题的成立,即操作或者全部成功或者全部失败,不会出现部分成功、部分失败的情况。事务以一种可靠的、简洁的方式来解决系统运行中的各种异常问题。
事务具有4个基本特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。简称ACID 特性。
1,原子性:一个事务中所有的数据库操作,是一个不可分割的整体,这些操作要么全部执行,要么全部无效果。
2,一致性:一个事务独立执行的结果,将保持数据库的一致性,即数据不会因事务的执行而被破坏。在事务执行过程中,可以违反一致性原则,并产生一个临时的不一致状态。
比如在转账过程中,会出现暂时的数据不一致的情况。当事务结束后,系统又回到一致的状态。不过临时的一致性不会导致问题,因为原子性会使得系统始终保持一致性。
3,隔离性:在多个事务并发执行的时候,系统应该保证与这些事务先后单独执行时的结果一样,即并发执行的任务不必关心其他事务。对于每一个事务来讲,那一刻看起来好像只有它在修改数据库一样。事务系统是通过对后台数据库数据使用同步协议来实现隔离性的。同步协议使一个事务与另外一个事务相分离。如果事务对数据进行了锁定,可以使并发的事务无法影响该数据,直到锁定解除为止。
4,持久性:一个事务一旦完成全部操作以后,它对数据库的所有操作将永久地反映在数据库中。持久性保证了系统在操作的时候免遭破坏。持久性主要是为了解决机器故障、突然断电、硬盘损坏等问题而出现的。为了达到持久性,系统一般都保留了一份日志。一旦出现故障,就可以通过日志将数据重建。