简答题
👁️ 浏览量:

试题题干

依据事务的 ACID 特征,编写银行数据库系统中的转账事务T:从账户A转账S金额资金到账户B。

参考答案

试题解析

首先,考虑到此事务应包含如下操作:

read(A); 

A=A-S;
write(A);

read(B); 

B=B+S;
write(B);

然后,基于事务的ACID特征,经分析:

(1)若某一时刻账户A已减去S金额的资金,而账户B尚未增加,这显然会出现一种不一致状态,因此需要将所有操作当作一个不可分割的整体,保证事务的原子性。

(2)要求数据库中账户A减去S金额资金的同时,账户B增加S金额资金,即账户A和账户B之和不变,维系数据库的一致性状态,保证事务的一致性。

(3)若有其他操作插入进来修改账户A或账户B的金额,会导致错误数据的产生,因此需要隔离上述所有操作,保证事务的隔离性。

(4)在所有操作成功执行完毕后,系统需要确保以后任务故障都不会再引起与这次转账相关的数据的丢失,保证事务的持久性。

最后,编写该转账事务T:

BEGIN TRANSACTION
read(A);
A=A-S;
write(A);
if(A<0) ROLLBACK;
else{
read(B);
B=B+S;
write(B);
COMMIT;
}

其中,ROLLBACK语句表示在账户A扣款透支时拒绝该转账操作,执行回滚操作,数据库中相关数据的值恢复到这个事务的初始状态;COMMIT语句表示转账操作顺利结束,数据库处于新的一致性状态。