---
title: "事务保存点 | OceanBase 文档中心"
description: 事务保存点 本文介绍事务保存点的相关说明及使用。 语句语法格式 SAVEPOINT 语句可以在事务过程中标记一个&quot;保存点&quot;，事务可以选择回滚到这个保存点。保存点是可选的，一个事务过程中也可以有多个保存点。 标记保存点的语句语法如下： SAVEPOINT pointname; 参数 是否必填 描述 示例 pointna…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.0.0 社区版

# 事务保存点

更新时间：2026-06-17 15:22:41

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.0.0/zh-CN/300.developer-guide/400.about-dml-statements-and-transactions/200.transaction/300.transaction-savepoints.md)  

本文介绍事务保存点的相关说明及使用。

## 语句语法格式

`SAVEPOINT` 语句可以在事务过程中标记一个"保存点"，事务可以选择回滚到这个保存点。保存点是可选的，一个事务过程中也可以有多个保存点。

- 标记保存点的语句语法如下：

  ```sql
  SAVEPOINT pointname;

  ```

  | 参数 | 是否必填 | 描述 | 示例 |
  | --- | --- | --- | --- |
  | pointname | 是 | 指定事务保存点的名称。 | fr |
 - 释放保存点的语句语法如下：

  > **注意**
  >
  >  
  >
  > 当 `RELEASE SAVEPOINT` 语句执行成功后，不能再回滚到指定的保存点以及 `RELEASE SAVEPOINT` 语句与指定的保存点之间的任何其他保存点。

  ```sql
  RELEASE SAVEPOINT pointname;

  ```
 - 通过 `ROLLBACK TO SAVEPOINT` 语句回滚到指定事务保存点。

  ```sql
  ROLLBACK TO SAVEPOINT pointname;

  ```

  回滚的详细说明，请参考 [回滚事务](https://www.oceanbase.com/docs/community-observer-cn-10000000000901508)。

## 示例：将一个事务回滚到一个保存点

下面示例展示了一个事务中包含多个 DML 语句和多个保存点，然后回滚到其中一个保存点，执行后只丢弃了保存点后面的那部份修改。

1. 查看表当前记录。

   ```sql
   obclient> SELECT * FROM t_insert;
   +----+------+-------+---------------------+
   | id | name | value | gmt_create          |
   +----+------+-------+---------------------+
   |  1 | CN   | 10001 | 1970-01-01 16:05:45 |
   |  2 | US   | 10002 | 1970-01-01 16:05:54 |
   |  3 | UK   | 10003 | 1970-01-01 16:05:54 |
   +----+------+-------+---------------------+
   3 rows in set

   ```
 2. 开启一个事务，设置多个保存点信息。

   ```sql
   obclient> SET session autocommit=off;
   Query OK, 0 rows affected

   obclient> BEGIN;
   Query OK, 0 rows affected

   obclient> INSERT INTO t_insert(id, name) VALUES(6,'FR');
   Query OK, 1 row affected

   obclient> SAVEPOINT fr;
   Query OK, 0 rows affected

   obclient> INSERT INTO t_insert(id, name) VALUES(7,'RU');
   Query OK, 1 row affected

   obclient> SAVEPOINT ru;
   Query OK, 0 rows affected

   obclient> INSERT INTO t_insert(id, name) VALUES(8,'CA');
   Query OK, 1 row affected

   obclient>SAVEPOINT ca;
   Query OK, 0 rows affected

   ```
 3. 当前会话能看到事务未提交的所有修改。

   ```sql
   obclient> SELECT * FROM t_insert;
   +----+------+-------+---------------------+
   | id | name | value | gmt_create          |
   +----+------+-------+---------------------+
   |  1 | CN   | 10001 | 1970-01-01 16:05:45 |
   |  2 | US   | 10002 | 1970-01-01 16:05:54 |
   |  3 | UK   | 10003 | 1970-01-01 16:05:54 |
   |  6 | FR   |  NULL | 1970-01-01 16:26:22 |
   |  7 | RU   |  NULL | 1970-01-01 16:26:32 |
   |  8 | CA   |  NULL | 1970-01-01 16:26:42 |
   +----+------+-------+---------------------+
   6 rows in set

   ```
 4. 回滚事务到其中一个保存点。

   ```sql
   obclient> ROLLBACK TO SAVEPOINT ru;
   Query OK, 0 rows affected

   obclient> SELECT * FROM t_insert;
   +----+------+-------+---------------------+
   | id | name | value | gmt_create          |
   +----+------+-------+---------------------+
   |  1 | CN   | 10001 | 1970-01-01 16:05:45 |
   |  2 | US   | 10002 | 1970-01-01 16:05:54 |
   |  3 | UK   | 10003 | 1970-01-01 16:05:54 |
   |  6 | FR   |  NULL | 1970-01-01 16:26:22 |
   |  7 | RU   |  NULL | 1970-01-01 16:26:32 |
   +----+------+-------+---------------------+
   5 rows in set

   ```
 5. 提交事务，并确认表最新修改包含保存点之前的修改。

   ```sql
   obclient> COMMIT;
   Query OK, 0 rows affected
   obclient> SELECT * FROM t_insert;
   +----+------+-------+---------------------+
   | id | name | value | gmt_create          |
   +----+------+-------+---------------------+
   |  1 | CN   | 10001 | 1970-01-01 16:05:45 |
   |  2 | US   | 10002 | 1970-01-01 16:05:54 |
   |  3 | UK   | 10003 | 1970-01-01 16:05:54 |
   |  6 | FR   |  NULL | 1970-01-01 16:26:22 |
   |  7 | RU   |  NULL | 1970-01-01 16:26:32 |
   +----+------+-------+---------------------+
   5 rows in set

   ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
