暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss每日一练第 16天 学习openGauss事务控制

原创 寒冰 2021-12-16
333

学习事务,事务就是一系列事件的一个包,只有所有的操作都正确了才能最终完成。我的经验是做销售的时候一个出库单发出后库存要减少,货车在途数量要增加,这两个必须全部确认才能算是一个事务完成。

–通过START TRANSACTION和BEGIN语法启动事务

START TRANSACTION;
select * from pg_class limit 1;
end;

开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY

BEGIN;
SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
show transaction_read_only;
select * from pg_class limit 1;
create schema tpcds10;
commit;
show transaction_isolation;
START TRANSACTION ISOLATION LEVEL repeatable read READ WRITE;
show transaction_isolation;
show transaction_read_only;
select * from pg_class limit 1;
create schema tpcds10;
rollback;

以隔离级别为repeatable read,读/写方式启动事务


这两个事务操作虽然我跟随这做了下来但是没有感觉到真实的用途,看了还是基本功不扎实。


下面使用保存点  savepoint 回滚事务。

这个操作用法直接。

CREATE TABLE table1(a int);  --首先创建表格table1
START TRANSACTION;   --启动事务
INSERT INTO table1 VALUES (1);  --然后插入数据


SAVEPOINT my_savepoint;  --设置一个保存点

这个保存点就是当回滚的时候恢复的位置。

这时插入一条数据

INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;--使用回滚操作,回滚到恢复点。z

这个 2的数值就没有被插入。

RELEASE SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;

然后删除保存点 再插入数据。 提交事务

这时只有两条数据。


因为实测系统出问题,我使用Navicat来测试的。

drop table table1;

CREATE TABLE table1(a int);  --首先创建表格table1
START TRANSACTION;   --启动事务
INSERT INTO table1 VALUES (1);  --然后插入数据
SAVEPOINT my_savepoint;  --设置一个保存点
select * from table1;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;--使用回滚操作,回滚到恢复点。
RELEASE SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;
select * from table1;


显示结果如图。


但是不知道为啥没有生效。这个很是纳闷。继续做实验。



重新执行一次,成功。



总结:  这次学习中发现细心还是很重要的,每一次的执行,有一项的不小心,都会出好多错误。

实测系统有问题就用自己的系统做吧。学习是最重要的。




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论