---
title: "回滚事务到某个保存点 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 回滚事务到某个保存点 标记保存点后，可以通过 ROLLBACK TO SAVEPOINT 语句回滚到指定的事务保存点。 前提条件 请确认已标记保存点，具体操作请参见 标记保存点 。 回滚事务到保存点 您可以使用以下语句，将事务回滚到保存点。 ROLLBACK TO SAVEPOINT pointname; 其中， p…
---
切换语言

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

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

# 回滚事务到某个保存点

更新时间：2026-04-09 19:34:05

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/300.develop/200.application-development-of-oracle-mode/600.transaction-in-develop-of-oracle-mode/300.transaction-savepoints-of-oracle-mode/200.rollback-to-a-savepoint-of-oracle-mode.md)  

标记保存点后，可以通过 `ROLLBACK TO SAVEPOINT` 语句回滚到指定的事务保存点。

## 前提条件

请确认已标记保存点，具体操作请参见 [标记保存点](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476622)。

## 回滚事务到保存点

您可以使用以下语句，将事务回滚到保存点。

```sql
ROLLBACK TO SAVEPOINT pointname;

```

其中，`pointname` 表示事务保存点的名称。

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

1. 查看表当前记录。

   ```sql
   obclient [SYS]> SELECT * FROM ordr;
   +----+------+-------+------------+
   | ID | NAME | VALUE | GMT_CREATE |
   +----+------+-------+------------+
   |  1 | CN   | 10001 | 01-JAN-70  |
   |  2 | US   | 10002 | 01-JAN-70  |
   |  3 | EN   | 10003 | 01-JAN-70  |
   +----+------+-------+------------+
   3 rows in set

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

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

   obclient [SYS]> BEGIN;
   Query OK, 0 rows affected

   obclient [SYS]> INSERT INTO ordr(id, name) VALUES(6,'FR');
   Query OK, 1 row affected

   obclient [SYS]> SAVEPOINT fr;
   Query OK, 0 rows affected

   obclient [SYS]> INSERT INTO ordr(id, name) VALUES(7,'RU');
   Query OK, 1 row affected

   obclient [SYS]> SAVEPOINT ru;
   Query OK, 0 rows affected

   obclient [SYS]> INSERT INTO ordr(id, name) VALUES(8,'CA');
   Query OK, 1 row affected

   obclient [SYS]> SAVEPOINT ca;
   Query OK, 0 rows affected

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

   ```sql
   obclient [SYS]> SELECT * FROM ordr;
   +----+------+-------+------------+
   | ID | NAME | VALUE | GMT_CREATE |
   +----+------+-------+------------+
   |  1 | CN   | 10001 | 01-JAN-70  |
   |  2 | US   | 10002 | 01-JAN-70  |
   |  3 | EN   | 10003 | 01-JAN-70  |
   |  6 | FR   |  NULL | 01-JAN-70  |
   |  7 | RU   |  NULL | 01-JAN-70  |
   |  8 | CA   |  NULL | 01-JAN-70  |
   +----+------+-------+------------+
   6 rows in set

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

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

   obclient [SYS]> SELECT * FROM ordr;
   +----+------+-------+------------+
   | ID | NAME | VALUE | GMT_CREATE |
   +----+------+-------+------------+
   |  1 | CN   | 10001 | 01-JAN-70  |
   |  2 | US   | 10002 | 01-JAN-70  |
   |  3 | EN   | 10003 | 01-JAN-70  |
   |  6 | FR   |  NULL | 01-JAN-70  |
   |  7 | RU   |  NULL | 01-JAN-70  |
   +----+------+-------+------------+
   5 rows in set

   ```

   根据查询结果可知，由于 `(8,'CA')` 是在保存点 `ru` 之后插入的数据，回滚后，该修改被丢弃。
 5. 提交事务，并确认表的最新修改包含了保存点之前的修改。

   ```sql
   obclient [SYS]> COMMIT;
   Query OK, 0 rows affected

   ```

更多回滚事务相的示例及说明，请参见 [回滚事务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476147)

 上一篇 下一篇 ![有帮助](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) 咨询热线
