数据库系统工程师 http://www.educity.cn/rk/dbms/index.html
为保证可串行化调度,在事物执行过程中引入相应指令进行控制,即两段锁协议(2PL),即对数据读之前先加读锁,写前加写锁,事务只有获得相应的锁才能操作数据,加解锁过程分为两个阶段,前一阶段只能加锁,后一阶段只能解锁,不允许有交叉。两段锁协议是保证并发事务可串行化调度的充分条件。 针对给出的伪指令操作序列,在事务读取数据之前加Slock()指令,写数据之前加Xlock()指令,并保证读/写锁不交叉,即满足两段锁协议。 [问题3]
本问题考查对2PL协议理论与SQL中的隔离级别,以及嵌入式SQL的编程实践。 本地给出的空缺(a)要补充的是嵌入式SQL的更新语句;空缺(b)要补充的是嵌入式SQL中的事务提交语句。
参考答案 [问题1] 调度A结果:8 调度B结果:9 调度C结果:7
调度A、B结果错误,因为破坏了事务的隔离性。一个事务的执行结果被另一个所覆盖。
[问题2]
(1)判定事务并发执行正确性的准则是满足可串行化调度。要保证并发事务正确地执行,采用两段锁协议(2PL)。 (2)重写后的售票程序伪指令序列: XLock(A);
数据库系统工程师 http://www.educity.cn/rk/dbms/index.html
R (A,x); w (A, x-a); Unlock(A); [问题3]
(a)balance= :x WHERE flight='A' (b)(b)EXEC SQL COMMIT WORK