📅  最后修改于: 2020-12-12 07:30:16             🧑  作者: Mango
示例:假设一家银行的雇员将800卢比从X的帐户转入Y的帐户。这个小事务包含几个底层任务:
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)
以下是交易的主要操作:
Read(X):读取操作用于从数据库读取X的值并将其存储在主存储器的缓冲区中。
Write(X):写操作用于将值从缓冲区写回到数据库。
让我们以一个示例从一个包含以下操作的帐户中借记交易为例:
1. R(X);
2. X = X - 500;
3. W(X);
假设在开始事务之前X的值为4000。
但是有可能由于硬件,软件或电源等的故障,该事务可能在完成集中的所有操作之前失败。
例如:如果在上述交易中,借记交易在执行操作2后失败,则X的值将在数据库中保留4000,这是银行不可接受的。
为了解决这个问题,我们有两个重要的操作:
提交:用于永久保存所做的工作。
回滚:用于撤消已完成的工作。