tencent cloud

TDSQL Boundless

产品动态
产品简介
产品概述
应用场景
产品架构
实例类型
兼容性说明
使用规范建议
自研内核
内核概述
内核版本更新动态
功能类特性
性能类特性
产品计费
计费概述
购买方式
价格详情
续费说明
欠费说明
退费说明
快速入门
创建实例
连接实例
用户指南
数据迁移
数据同步/订阅
实例管理
参数配置
账号管理
安全组
备份与恢复
数据库审计
标签管理
实践教程
Online DDL 的技术演进与使用实践
锁机制解析与问题排查实践
数据智能调度及相关性能优化实践
TDSQL Boundless 选型指南与实践教程
开发指南
开发指南(MySQL 兼容模式)
开发指南(HBase 兼容模式)
性能调优
性能调优概述
SQL 调优
DDL 调优
性能白皮书
性能概述
TPC-C 测试
Sysbench 测试
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Security Group APIs
Task APIs
Backup APIs
Rollback APIs
Parameter APIs
Database APIs
Data Types
Error Codes
通用参考
系统原理
SQL 参考
数据库参数说明
TPC-H 基准测试数据模型参考
错误码信息
安全与合规
常见问题
服务协议
服务等级协议
服务条款
隐私政策
数据处理和安全协议
联系我们
词汇表

SAVEPOINT

PDF
聚焦模式
字号
最后更新时间: 2026-03-06 18:48:09

功能描述

保存点(Savepoint)是事务内的一个标记点,允许在事务执行过程中设置回滚点,实现部分回滚而不影响整个事务。

语法

设置保存点
在当前事务中创建指定名称的保存点。
如果同名保存点已存在,则删除原保存点并创建新的保存点。
SAVEPOINT savepoint_name;
回滚到保存点
将事务回滚到指定保存点,不终止事务。
回滚后,保存点之后的所有数据修改将被撤销。
后续保存点会被自动删除。
ROLLBACK TO SAVEPOINT savepoint_name;
释放保存点
删除指定保存点及之后创建的所有保存点。不提交或回滚事务。
RELEASE SAVEPOINT savepoint_name;

参数说明

参数
是否必选
说明
savepoint_name
保存点的唯一名称标识,支持大小写英文字母、数字。

注意事项

回滚或释放不存在的保存点时,会返回错误ERROR 1305 (42000): SAVEPOINT does not exist
事务提交或回滚后,所有保存点自动清除。
保存点名称在同一事务内必须唯一。

示例

1. 准备环境。
-- 创建测试表
CREATE TABLE account (
id INT PRIMARY KEY,
name VARCHAR(50),
balance DECIMAL(10,2)
);

-- 插入测试数据
INSERT INTO account VALUES (1, 'Alice', 1000.00);
INSERT INTO account VALUES (2, 'Bob', 500.00);
2. 事务操作流程。
-- 开始事务
BEGIN;

-- 查看初始状态
SELECT * FROM account WHERE id IN (1,2);

-- Alice向Bob转账100元
UPDATE account SET balance = balance - 100 WHERE id = 1;
SELECT * FROM account WHERE id IN (1,2);

-- 设置保存点sp1
SAVEPOINT sp1;

-- Bob收到100元
UPDATE account SET balance = balance + 100 WHERE id = 2;
SELECT * FROM account WHERE id IN (1,2);

-- 设置保存点sp2
SAVEPOINT sp2;

-- 再次转账50元
UPDATE account SET balance = balance - 50 WHERE id = 1;
UPDATE account SET balance = balance + 50 WHERE id = 2;
SELECT * FROM account WHERE id IN (1,2);

-- 设置保存点sp3
SAVEPOINT sp3;

-- 回滚到sp2保存点(撤销第二次转账)
ROLLBACK TO SAVEPOINT sp2;
SELECT * FROM account WHERE id IN (1,2);

-- 释放sp1保存点(删除sp1及之后的所有保存点)
RELEASE SAVEPOINT sp1;

-- 尝试回滚到sp3会失败(因为sp3已被删除)
-- ROLLBACK TO SAVEPOINT sp3; -- 这行会报错

-- 提交事务
COMMIT;
3. 验证结果。
-- 查询最终余额
SELECT * FROM account;
预期结果:
+----+-------+---------+
| id | name | balance |
+----+-------+---------+
| 1 | Alice | 900.00 |
| 2 | Bob | 600.00 |
+----+-------+---------+
执行过程状态变化:
操作步骤
Alice 余额
Bob 余额
说明
初始状态
1000.00
500.00
事务开始前
第一次转账
900.00
500.00
Alice 转出100元
设置 sp1 后
900.00
600.00
Bob 收到100元
设置 sp2 后
850.00
650.00
再次转账50元
回滚到 sp2
900.00
600.00
撤销第二次转账
最终提交
900.00
600.00
事务完成

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈