1 实验目的
- 理解数据库管理系统并发控制基本原理。
- 熟练掌握数据库管理系统并发控制相关的命令与工具。
- 通过设计实验验证隔离级别的数据一致性表现。
2 实验平台与工具
- Windows、Linux操作系统
- 数据库管理系统PostgreSQL
3 实验内容
- 通过pgAdmin或者PostgreSQL命令创建两个用户A和B,分别用于两个命令提示符窗口(psql)的登录,用于模拟执行两个事务的客户端;
- 在PostgreSQL的默认隔离级别下验证“不可重复读”的数据一致性表现,并行执行两个事务,具体方法自行设计,可以参考教材;
- 修改PostgreSQL的隔离级别为“可重复读”,重现上述实验过程,对比实验结果,展现“可重复读”隔离级别下的数据一致性表现。
提示:
- 参考“PostgreSQL13.1-CN-v1.0.pdf”文件的3.4节和第13章
- 参考“【隔离级别命令】PostgreSQL的事务隔离级别 - abce - 博客园.pdf” 文件
- 需要关闭数据库管理系统的自动提交功能“\set AUTOCOMMIT off”
一、实验环境
1. 操作系统:Windows 10
2. 数据库管理软件(含版本号):PostgreSQL 13.12-1-windows-x64
二、实验内容及其完成情况
1. 通过pgAdmin或者PostgreSQL命令创建两个用户A和B,分别用于两个命令提示符窗口(psql)的登录,用于模拟执行两个事务的客户端。
1.1 通过PostgreSQL命令创建两个用户A和B,如图1所示。
图1
1.2用两个命令提示符窗口(psql)的登录来模拟两个事务的客户端,如图2 所示。
图2
2. 在PostgreSQL的默认隔离级别下验证“不可重复读”的数据一致性表现,并行 执行两个事务。
在事务一中,用户a对course表中的cno=’1’的ccredit进行更改为5;在事务一提交之前,用户b 对course表的cno=’1’进行事务二查询,ccredit=4,还是初始值;事务一提交后,事务二再次执行查询,发现ccredit=5。所以验证了PostgreSQL的默认隔离级别下“不可重复读”的数据一致性表现,如图3所示。
图3
3. 修改PostgreSQL的隔离级别为“可重复读”,重现上述实验过程,对比实验结 果,展现“可重复读”隔离级别下的数据一致性表现。
将每个事务的隔离级别都设置为 "可重复读"。在事务一中,用户a对course 表中的cno=’1’的ccredit进行更改为4;在事务一提交之前,用户b 对course表的 cno=’1’进行事务二的查询,ccredit=5,还是初始值;事务一提交后,事务二再次执 行查询,发现ccredit还是等于5,没有发生改变。所以验证了PostgreSQL的“可 重复读”隔离级别下的数据一致性表现,如图4所示。
图4
三、实验总结
(可以总结实验中出现的问题以及解决的思路,也可以列出没有解决的问题)
问题1:
1.问题描述
创建的时候是用户B,而登录的时候却要用b,如图5所示。
图5
2.问题分析(可能的原因、难点、挑战)
在 PostgreSQL 中,数据库对象(如用户、数据库、表等)的名称是区分大小写的,但在默认情况下,它们在系统中被存储为小写。
3.解决方案
(如该问题没有被解决可以不写具体的解决方案,而给出大致的思路和方向)
因为未使用双引号将用户名括起来,PostgreSQL 会将用户名存储为小写,所以用小写b就可以登录了。
问题2:
1.问题描述
显示用户a对course表没有权限操作。
2. 问题分析(可能的原因、难点、挑战)
图6
没有给用户a和b赋予修改course表的权限,如图6所示。
3.解决方案
(如该问题没有被解决可以不写具体的解决方案,而给出大致的思路和方向)
图7
这样a可以对course表进行更新,b可以对course表进行查询,如图7所示。