更新日期:2024年09月11日
功能描述
SAVEPOINT 用于在当前事务里建立一个新的保存点。
保存点是事务中的一个特殊记号,
它允许将那些在它建立后执行的命令全部回滚,
把事
务的状态恢复到保存点所在的时刻。
注意事项
使用ROLLBACK TO SAVEPOINT 回滚到一个保存点。
使用RELEASE SAVEPOINT 删
除一个保存点,但是保留该保存点建立后执行的命令的效果。
保存点只能在一个事务块里面建立。在一个事务里面可以定义多个保存点。
由于节点故障或者通信故障引起的节点线程或进程退出导致的报错,以及由于COPY
FROM 操作中源数据与目标表的表结构不一致导致的报错,均不能正常回滚到保存点之前,
而是整个事务回滚。
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1226
SQL 标准要求,使用savepoint 建立一个同名保存点时,需要自动删除前面那个同名保
存点。在GBase 8c 数据库里,我们将保留旧的保存点,但是在回滚或者释放的时候,只使
用最近的那个。释放了新的保存点将导致旧的再次成为ROLLBACK TO SAVEPOINT 和
RELEASE SAVEPOINT 可以访问的保存点。除此之外,SAVEPOINT 是完全符合SQL 标准
的。
语法格式
SAVEPOINT savepoint_name;
参数说明
savepoint_name
新建保存点的名称。
示例
--创建一个新表。
gbase=#CREATE TABLE table1(a int);
--开启事务。
gbase=#START TRANSACTION;
--插入数据。
gbase=#INSERT INTO table1 VALUES (1);
--建立保存点。
gbase=#SAVEPOINT my_savepoint;
--插入数据。
gbase=#INSERT INTO table1 VALUES (2);
--回滚保存点。
gbase=#ROLLBACK TO SAVEPOINT my_savepoint;
--插入数据。
gbase=#INSERT INTO table1 VALUES (3);
--提交事务。
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1227
gbase=#COMMIT;
--查询表的内容,会同时看到1 和3,不能看到2,因为2 被回滚。
gbase=#SELECT * FROM table1;
--删除表。
gbase=#DROP TABLE table1;
--创建一个新表。
gbase=#CREATE TABLE table2(a int);
--开启事务。
gbase=#START TRANSACTION;
--插入数据。
gbase=#INSERT INTO table2 VALUES (3);
--建立保存点。
gbase=#SAVEPOINT my_savepoint;
--插入数据。
gbase=#INSERT INTO table2 VALUES (4);
--回滚保存点。
gbase=#RELEASE SAVEPOINT my_savepoint;
--提交事务。
gbase=#COMMIT;
--查询表的内容,会同时看到3 和4。
gbase=#SELECT * FROM table2;
--删除表。
gbase=#DROP TABLE table2;
相关命令
RELEASE SAVEPOINT,ROLLBACK TO SAVEPOINT
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1228