【数据库实验】实验8解析


在不开启自动提交的时候,用户对数据库的修改仅对自己可见,直到 commit 提交结果,或 rollback 撤回结果。commit 的结果无法 rollback,反之同理。

有一个例外,一些对表结构的操作(创建修改表结构,以及对索引的操作),会使得在操作之前自动 commit 提交事务,执行完再次 commit,使得这些操作是不可被撤销的。

网上对于这个实验只有答案,没有解释,来解释一下答案的来源。

序号 窗口 题号 执行语句 结果/解释
1 备用窗口 update test8_00 set age=88 当前用户可见 88,其他人不可见
2 备用窗口 结果 1 select * from test8_00 88
3 备用窗口 commit 提交成功,其他成员可见 88
4 备用窗口 rollback 该语句紧跟在 commit 后面无效
5 备用窗口 update test8_00 set age=age+1 当前用户可见 89,其他人为 88
6 备用窗口 rollback 回滚成功,所有成员可见 88
7 备用窗口 commit 该语句紧跟在 rollback 后面无效
8 备用窗口 update test8_00 set age=age+2 当前用户可见 90,其他人为 88
9 备用窗口 commit 提交成功,其他成员可见 90
10 备用窗口 结果 2 select * from test8_00 90
11 备用窗口 rollback 回滚查询语句对数据存储没有影响
12 主窗口 结果 3 select * from userb.test8_00 90
13 备用窗口 update test8_00 set age=age-2 当前用户可见 88,其他人为 90
14 备用窗口 update test8_00 set age=age-2 当前用户可见 86,其他人为 90
15 备用窗口 结果 4 select * from test8_00 86
16 主窗口 结果 5 select * from userb.test8_00 90
17 主窗口 commit 提交查询语句对数据存储没有影响
18 主窗口 结果 6 select * from userb.test8_00 90
19 主窗口 rollback 回滚查询语句对数据存储没有影响
20 主窗口 update userb.test8_00 set age=age-10 卡死,等待备用窗口提交或回滚后执行
21 备用窗口 结果 7 select * from test8_00 86
22 备用窗口 create table test8_01 as select * from test8_00 建表前提交之前事务,解冻主窗口,主 76 其他 86
23 备用窗口 rollback 创建表无法回滚
24 备用窗口 结果 8 select * from userb.test8_00 86
25 主窗口 结果 9 select * from userb.test8_00 76
26 主窗口 rollback 所有用户回归 86
27 主窗口 结果 10 select * from userb.test8_00 86

  目录