事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所做的所有更改都会被撤消。例如,将资金从支票帐户转到储蓄帐户中是一项事务,按步骤如下进行:
-
检查支票帐户是否有足够的资金来支付此转帐操作。
-
如果支票帐户中有足够的资金,则将该笔资金记入此帐户的借方。
-
将这些资金记入储蓄帐户的贷方。
-
将此次转帐记录到支票帐户日志中。
-
将此次转帐记录到储蓄帐户日志中。
如果这些步骤的任何一个步骤失败,则必须撤消在前面的步骤中所做的所有更改,而且支票帐户和储蓄帐户的状态必须与它们在事务开始之前的状态相同。该事件称为回滚。如果所有步骤均成功完成,那么事务即处于已提交状态。事务以提交或回滚结束。
事务的特性:
原子性:指整个事务是不可以分割的工作单元。只有事务中所有的操作执行成功,才算整个事务成功,事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该回到执行事务前的状态。
一致性:指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对于银行转账事务,不管事务成功还是失败,应该保证事务结束后两个转账账户的存款总额是与转账前一致的。
隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
持久性:指的是只要事务成功结束它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。