假设同时有两个客户向同一账号发出存款请求,该程序会出现什么问题? (100字以内) 若用SQL语句编写的存款业务事务程序如下: … START TRANSACTION; SET TRANSACTION ISOLATION LEVEL READ UNCO

admin2008-11-02  36

问题 假设同时有两个客户向同一账号发出存款请求,该程序会出现什么问题?  (100字以内)
若用SQL语句编写的存款业务事务程序如下:

START TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE  Accounts
SET CurrentBalance = CurrentBalance + Amount
WHERE AccountID = AccountNo;
COMMIT;

   其中:Accounts 为账户表,CurrentBalance 为当前余额,Amount为新存入的金额,AccountNo为外部输入的账户编码。
   该事务程序能否正确实现并发的存款业务?如果不能,请说明原因,应做怎样的修改?  (100字以内)

选项

答案不能实现,因为程序中的隔离级别设置为READ UNCOMMITTED,未实现加锁控制,不能达到串行化调度。 修改方法: 将程序中的SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 改为SET TRANSACTION ISOLATION LEVEL SERIALIZABLE。

解析 隔离级别定义了事务与事务之间的隔离程度。隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
ANSI/ISO SQL92 标准定义了一些数据库操作的隔离级别:
   未提交读(READ UNCOMMITTED)
   提交读(READ COMMITTED)
   重复读(REPEATABLE READ)
   序列化(SERIALIZABLE)
   问题3事务程序不能正确实现并发的存款业务其原因是语句SET TRANSACTION ISOLATION LEVEL的隔离级别设置的是READ UNCOMMITTED,没有实现加锁控制,为此应该将隔离级别设置为SERIALIZABLE。
转载请注明原文地址:https://kaotiyun.com/show/xyUZ777K
0

相关试题推荐
最新回复(0)