有表ticket记录了航班余票数,其结构如下表所示: 列 类型 说明 flight_no char(6) primary key tickets int 余票数 现有两个涉及该表的并发事务t1和t2,分别定义在t1.sql和t2.sql代码文件中,请在两个代码文件适当的地方补充代码,构造“读脏”现象。t1是读脏的那个事务,而t2是那个修改数据后又撤销的事务。 需要补充代码的位置均在以#开头的注释行的下一行。必要时,请复习第1关介绍的相关内容。 代码文件编辑器里看到的是t1.sql,请将鼠标移至“代码文件”右侧的三角符号,从下拉列表中切换代码文件(可在t1.sql和t2.sql间随意切换)。确认两个文件都正确后,再点击评测按钮。
时间: 2024-02-27 21:57:51 浏览: 72
qa::kissing_face_with_closed_eyes:基于Spring Boot的问答网站
t1.sql:
```
begin;
# t1 事务读取余票数,但未提交
SELECT tickets FROM ticket WHERE flight_no = 'CA1234' FOR UPDATE;
# 在这里暂停 t1 事务,等待 t2 事务操作
```
t2.sql:
```
begin;
# t2 事务修改余票数
UPDATE ticket SET tickets = tickets - 1 WHERE flight_no = 'CA1234';
# 在这里暂停 t2 事务,等待 t1 事务操作
# 撤销 t2 事务的修改操作
rollback;
# 在这里继续 t2 事务的操作
```
注意:这里的代码仅用于构造“读脏”现象,实际应用中不要使用这样的代码,防止数据不一致。
阅读全文