示例: 假设银行员工从X
的帐户向Y
的帐户转账800
元,这个小事务包含几个低级任务:
X 的帐户
Open_Account(X) Old_Balance = X.balance New_Balance = Old_Balance - 800 X.balance = New_Balance Close_Account(X)
Y 的帐户
Open_Account(Y) Old_Balance = Y.balance New_Balance = Old_Balance + 800 Y.balance = New_Balance Close_Account(Y)
事务操作:
以下是交易的主要操作:
举一个例子来从一个帐户中扣除交易,该帐户包含以下操作:
第1步. R(X); // 读取 第2步. X = X - 500; // 扣除操作 第3步. W(X); // 更改写入
假设在开始交易之前X的值是4000
。
500
,因此缓冲区将包含3500
。X
的最终值将是3500
。但有可能由于硬件,软件或电源等的故障,交易可能在完成集合中的所有操作之前失败。
例如:如果在上述交易中,借方交易在执行操作的第2步后失败,那么X
的值将在数据库中保持为4000
,这是银行无法接受的。
要解决这个问题,有两个重要的操作:
提交 :用于永久保存工作。
回滚 :用于撤消已完成的工作。