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

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

事务保存点简介

定义
事务保存点是事务内部的一个“检查点”,用于标记事务执行过程中的某个状态。通过回滚到保存点,可以撤销部分操作,而非整个事务。这在复杂事务中尤其有用,因为可以保留之前的操作结果,而只回滚到某个特定的点。

作用

• 部分回滚:当事务中的部分操作失败时,仅回滚到保存点,保留之前的操作结果。

• 提高灵活性:在复杂事务中分段处理逻辑,增强错误恢复能力。

• 嵌套控制:支持多个保存点的嵌套设置,实现更细粒度的控制。

保存点操作相关语法

设置保存点
SAVEPOINT savepoint_name [UNIQUE];
• savepoint_name :保存点的名称。

• UNIQUE :可选参数,确保在同一事务中不会设置同名的保存点。

回滚到保存点
ROLLBACK TO SAVEPOINT savepoint_name;
• savepoint_name :要回滚到的保存点名称。

释放保存点
RELEASE SAVEPOINT savepoint_name;
• savepoint_name :要释放的保存点名称。

• 释放保存点后,不能再使用 ROLLBACK 命令回滚到该保存点。

示例

(一)基本操作

• 创建数据库和表

CREATE DATABASE db0 WITH LOG;
CREATE TABLE t0 (id INT, c1 VARCHAR(10));

• 开启事务并设置保存点

BEGIN WORK;
INSERT INTO t0 VALUES (1, 'name1');
SAVEPOINT sp1;
INSERT INTO t0 VALUES (2, 'name2');
SAVEPOINT sp2;
INSERT INTO t0 VALUES (3, 'name3');
SAVEPOINT sp3;
• 查询数据

SELECT * FROM t0;

输出:

id c1
1 name1
2 name2
3 name3
• 释放保存点并回滚

RELEASE SAVEPOINT sp2;
ROLLBACK TO SAVEPOINT sp2;

此时,回滚到 sp2 时会报错,因为 sp2 已被释放:

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

posted @ 2025-07-24 14:18  GBASE南大通用  阅读(4)  评论(0)    收藏  举报