1. 首页
  2. 数据库系统工程师
  3. 2010年上半年数据库系统工程师考试下午真题【应用技术】
  4. 真题详解

2010年上半年数据库系统工程师考试下午真题【应用技术】(第5题)

试题【5】(15分)

  阅读下列说明,回答问题1至问题3。
【说明】

  某航空售票系统负责所有本地起飞航班的机票销售,并设有多个机票销售网点。各售票网点使用相同的售票程序。假设售票程序中用到的伪指令如表5-1所示。

  假设某售票网点一次售出a张航班A的机票,则售票程序的伪指令序列为:R(A,x);W(A,X-a)。根据上述业务及规则,完成下列问题:

问题1(5.0分)

  若两个售票网点同时销售航班A的机票,在数据库服务器端可能出现如下的调度:
  A:R1(A,x),R2(A,X),W1(A,x-1),W2(A,x-2);
  B:R1(A,x),R2(A,x),W2(A,x-2),W1(A,x-1);
  C:R1(A,x),W1(A,x-1),R2(A,X),W2(A,x-2);
  其中Ri(A,x),Wi(A,x)分别表示第i个销售网点的读写操作,其余类同。
  假设当前航班A剩余10张机票,分析上述三个调度各自执行完后的剩余票数,并指出错误的调度及产生错误的原因。
暂无

问题2(6.0分)

  (1)判定事务并发执行正确性的准则是什么?如何保证并发事务正确地执行?
  (2)引入相应的加解锁指令,重写售票程序的伪指令序列,以保证正确的并发调度。
暂无

问题3(4.0分)

  下面是用E-SQL实现的机票销售程序的一部分,请补全空缺处的代码。
  EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
  EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight='A';
  printf("航班A当前剩余机票数为:%dn请输入购票数:",x);
  scanf("%d",&a);
  x=x-a;
  if(x<0)
  EXEC SQL ROLLBACK WORK;
  printf("票数不够,购票失败!");
  else{
  EXEC SQL UPDATE tickets SET(a);
  if(SQLCA.sqlcode<>SUCCESS)
  EXEC SQL ROLLBACK WORK;
  else
  (b) ;
  }
暂无
广告位
试题标签
难度评价
  • 容易 0%
  • 中等 0%
  • 偏难 0%