学习事务,事务就是一系列事件的一个包,只有所有的操作都正确了才能最终完成。我的经验是做销售的时候一个出库单发出后库存要减少,货车在途数量要增加,这两个必须全部确认才能算是一个事务完成。
–通过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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




