管理事务

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。shark插件支持的事务控制命令有启动、设置保存点、提交、回滚事务。

注意事项

  • 本章节只包含shark新增的语法,原openGauss的事务控制语法由于无法避免的冲突仅删除begin transaction transaction_mode语法,冲突的语法可使用类似语法begin transaction_mode或者start transaction transaction_mode代替。
  • D库的PL/pgSQL不支持BEGIN TRAN和BEGIN TRANSACTION语法。

语法格式

  • 启动事务

使用BEGIN语法启动事务。transaction_name没有实际意义,仅语法兼容。

1. BEGIN { TRAN | TRANSACTION } [ { transaction_name } ]; - 设置保存点

使用save语法为当前数据状态做一个标记,它允许将那些在它建立后执行的命令全部回滚,把事务的状态恢复到保存点所在的时刻。

设置保存点。

1. SAVE { TRAN | TRANSACTION } { savepoint_name };

回滚保存点。

1. ROLLBACK { TRAN | TRANSACTION } { savepoint_name }; - 提交事务

使用COMMIT完成提交事务的功能,即提交事务的所有操作。transaction_name没有实际意义,仅语法兼容。

1. COMMIT [ { TRAN | TRANSACTION } [ transaction_name ] ]; - 回滚事务

使用ROLLBACK回滚到某个保存点或回滚事务中的所有操作。带有savepoint_name参数时回滚到对应保存点,否则回滚所有操作。

1. ROLLBACK { TRAN | TRANSACTION } [ savepoint_name ];

参数说明

  • TRAN | TRANSACTION

BEGIN格式中的可选关键字,没有实际作用。 - transaction_name

无实际意义,仅语法兼容。 - SAVE

设置保存点。 - savepoint_name

保存点名称,后续使用ROLLBACK命令时可以用。 - COMMIT

提交当前事务,让所有当前事务的更改为其他事务可见。 - ROLLBACK

回滚当前事务,撤销操作。

示例

1. opengauss=# create table t1 (c1 int);
2. CREATE TABLE
3. opengauss=# begin tran;
4. BEGIN
5. opengauss=# insert into t1 values(1);
6. INSERT 0 1
7. opengauss=# save tran savepoint1;
8. SAVEPOINT
9. opengauss=# insert into t1 values(2);
10. INSERT 0 1
11. opengauss=# rollback tran savepoint1;
12. ROLLBACK
13. opengauss=# commit tran;
14. COMMIT
15. opengauss=# select * from t1;
16. c1
17. ----
18. 1
19. (1 row)