GBASE南大通用技术分享:GBase 8s数据库的事务保存点详解(之二)

在数据库操作中,事务的管理对于确保数据的一致性和完整性至关重要。南大通用 GBase 8s 提供了事务保存点的功能,允许在事务内部设置标记,从而实现部分回滚,而不是回滚整个事务。这为复杂事务的错误处理提供了更大的灵活性。本文将详细介绍 GBase 8s 中事务保存点的定义、作用、操作语法以及关键特性。

嵌套支持

• 创建数据库和表

CREATE DATABASE db1 WITH LOG;
CREATE TABLE t1 (id INT, c1 VARCHAR(10));
• 开启事务并设置嵌套保存点

BEGIN WORK;
INSERT INTO t1 VALUES (1, 'name1');
SAVEPOINT sp1;
UPDATE t1 SET c1 = 'rose';
SAVEPOINT sp2;
INSERT INTO t1 VALUES (2, 'name2');
SAVEPOINT sp3;
INSERT INTO t1 VALUES (3, 'name3');
SAVEPOINT sp4;

• 回滚到嵌套保存点

ROLLBACK TO SAVEPOINT sp2;
此时, sp3 和 sp4 自动失效:

ROLLBACK TO SAVEPOINT sp3;
输出:

26076: Unable to rollback to savepoint sp3.
32026: Savepoint not found.

名称覆盖
• 创建表并开启事务

CREATE TABLE t2 (id INT, c1 VARCHAR(10));
BEGIN WORK;
INSERT INTO t2 VALUES (1, 'name1');
SAVEPOINT sp1;
INSERT INTO t2 VALUES (2, 'name2');
SAVEPOINT sp2;
INSERT INTO t2 VALUES (3, 'name3');
SAVEPOINT sp2;
• 查询数据

SELECT * FROM t2;
输出:

id c1
1 name1
2 name2
3 name3
• 回滚到覆盖的保存点

ROLLBACK TO SAVEPOINT sp2;
此时,第一个 sp2 保存点失效,数据状态回滚到第二个 sp2 :

SELECT * FROM t2;
输出:

id c1
1 name1
2 name2
3 name3

posted @ 2025-07-25 16:36  GBASE南大通用  阅读(4)  评论(0)    收藏  举报