数据库实验七--OpenGauss(事务与并发控制)

实验要求

  1. 编写事务实例,分别使其成功提交和回滚,观察该事务对数据库的影响。
  2. 利用数据库管理系统提供的封锁机制解决并发操作带来的数据不一致情况。

实验操作

编写事务实例

事务是一系列数据库操作,是数据库应用程序的基本逻辑单元。无论有无故障,无论有多少事务并发执行,数据库系统都必须保证事务的正确执行一一事务中的所有操作要么全做,要么全不做。事务是并发控制的基本单位,也是数据库恢复的基本单位。

openGauss数据库支持的事务管理命令有启动、设置、提交、回滚事务。

启动事务(START TRANSACTION | BEGIN)

START TRANSACTION
 [ 	{ISOLATION LEVEL 
	{READ COMMITTED | READ UNCOMMITTED  | SERIALIZABLE | REPEATABLE READ} | 
 	{READ WRITE | READ ONLY}} 
	[, ...] ];

设置事务(SET TRANSACTION)

{ SET [ LOCAL ] TRANSACTION | SET SESSION CHARACTERISTICS AS TRANSACTION }
{ ISOLATION LEVEL 
{READ COMMITTED | READ UNCOMMITTED  | SERIALIZABLE | REPEATABLE READ} | 
{READ WRITE | READ ONLY}} 
[, ...];

提交事务

{ COMMIT | END } [ WORK | TRANSACTION ];

回滚事务

ROLLBACK [ WORK | TRANSACTION ];

回滚事例

连接数据库

su - omm
gs_om -t start
gsql -d postgres -p 26000 -r

启动事务

start transaction;

在这里插入图片描述首先查看当前students数据

select * from students;

添加一行数据

insert into students ;
values ('201825003','王五','男','1996-02-02',2017,'数学','ma');

再次查询数据

select * from students;

在这里插入图片描述
回滚事务:

ROLLBACK;

再次查询会发现回滚完成
在这里插入图片描述

提交事务

同样按照之前的步骤,先把事务打开并进行操作

start transaction;
select * from students;

insert into students 
values ('201825003','赵六','男','1996-02-02',2017,'数学','ma');

select * from students;

在这里插入图片描述
提交事务

COMMIT TRANSACTION;

提交后查询发现事务已提交

在这里插入图片描述

封锁机制

加锁格式

LOCK [ TABLE ] {[ ONLY ] name [, ...]| {name [ * ]} [, ...]}
    [ IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE} MODE ]
    [ NOWAIT ];

为students表添加事务,然后加锁

start transaction;
lock students;

在这里插入图片描述
我们查看所有锁

SELECT  * FROM pg_locks ;

在这里插入图片描述
提交事务后再次查询

commit transaction;
select * from pg_locks;

在这里插入图片描述

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiaki_0ff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值