---
title: "更新数据 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 更新数据 插入表数据后，可以使用 UPDATE 语句来更新表的行记录。本文介绍了相关语句的使用方法和示例。 数据更新准备 在更新表数据前，请确认以下事项： 请确认您已连接到数据库的 Oracle 租户，连接数据库的操作请参见 连接方式概述 。 说明 当前登录租户所属的租户模式可以由 sys 租户通过查询 oceanb…
---
切换语言

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

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

# 更新数据

更新时间：2026-02-17 12:17:44

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/300.develop/200.application-development-of-oracle-mode/400.write-data-of-oracle-mode/200.update-data-of-oracle-mode-in-develop.md)  

插入表数据后，可以使用 `UPDATE` 语句来更新表的行记录。本文介绍了相关语句的使用方法和示例。

## 数据更新准备

在更新表数据前，请确认以下事项：

- 请确认您已连接到数据库的 Oracle 租户，连接数据库的操作请参见 [连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476144)。

  #### 说明

  当前登录租户所属的租户模式可以由 `sys` 租户通过查询 `oceanbase.DBA_OB_TENANTS` 视图进行确认。
 - 请确认您已拥有待操作的表的 `UPDATE` 权限，查看当前用户权限的相关操作请参见 [查看用户权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479232)。如果不具备该权限，请联系管理员为您授权，用户授权的相关操作请参见 [直接授予权限](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479231)。

## 使用 UPDATE 语句更新数据

通常使用 [UPDATE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004480986) 语句来更新表数据。

`UPDATE` 语句的语法格式如下：

```sql
UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];

```

| 参数 | 是否必填 | 描述 |
| --- | --- | --- |
| table_name | 是 | 指定需要更新数据的表 |
| column_name = value [, column_name = value] | 是 | 指定需要更新的列，等号（=）后面的 `value` 为更新的目标值 |
| [ WHERE condition ] | 否 | 条件子句指定要更新的行记录必须满足的条件。如果不填表示更新表对应列的所有记录。 |

### 更新部分记录

在更新表数据时，可以只更新部分记录。

示例 4：`t_insert` 表中 更新 `id = 3` 所在行的 `name` 列的值为 `UK`。

```shell
obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
|  1 | CN   | 10002 | 31-OCT-22  |
|  2 | US   | 10004 | 31-OCT-22  |
|  3 | EN   | 10004 | 01-NOV-22  |
+----+------+-------+------------+
3 rows in set

obclient [SYS]>  UPDATE t_insert SET name = 'UK' WHERE id = 3;
Query OK, 1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0

obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
|  1 | CN   | 10002 | 31-OCT-22  |
|  2 | US   | 10004 | 31-OCT-22  |
|  3 | UK   | 10004 | 01-NOV-22  |
+----+------+-------+------------+
3 rows in set

```

但是，当表上有唯一性约束时，如果更新为相同的记录，系统会报错，数据更新失败，报错示例如下。

```shell
obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
|  1 | CN   | 10002 | 31-OCT-22  |
|  2 | US   | 10004 | 31-OCT-22  |
|  3 | UK   | 10004 | 01-NOV-22  |
+----+------+-------+------------+
3 rows in set

obclient [SYS]> CREATE UNIQUE INDEX uk_name ON t_insert(name);
Query OK, 0 rows affected

obclient [SYS]> UPDATE t_insert SET name = 'US' where id = 3;
OBE-00001: unique constraint 'US' for key 'UK_NAME' violated

```

### 更新所有记录

示例 1：更新 `t_insert` 表中 `value` 列的所有值，并将所有值加 `1`。

```shell
obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
|  1 | CN   | 10001 | 31-OCT-22  |
|  2 | US   | 10002 | 31-OCT-22  |
|  3 | EN   | 10003 | 01-NOV-22  |
+----+------+-------+------------+
3 rows in set

obclient [SYS]> UPDATE t_insert SET value = value+1;
Query OK, 3 rows affected
Rows matched: 3  Changed: 3  Warnings: 0

obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
|  1 | CN   | 10002 | 31-OCT-22  |
|  2 | US   | 10003 | 31-OCT-22  |
|  3 | EN   | 10004 | 01-NOV-22  |
+----+------+-------+------------+
3 rows in set

```

执行 `UPDATE` 语句时要注意控制事务不要太大，您可以通过 `WHERE` 关键字来控制范围。这是因为不带条件更新数据时，如果记录数达到几十万或者几百万，会有大事务产生，可能会导致执行失败。

示例 2：在 `t_insert` 表中，对 `value` 值为 `10003` 的所有列，将其值更新为 `value+1`。

```shell
obclient [SYS]> UPDATE t_insert SET value = value+1 WHERE value = 10003;
Query OK, 1 row affected
Rows matched: 1  Changed: 1  Warnings: 0

```

## 通过 DBLink 使用 UPDATE 语句更新数据

当前 OceanBase 数据库支持通过 DBLink 向 OceanBase 数据库（Oracle 模式）和 Oracle 数据库中更新数据。

通过 DBLink 将远端数据库表 `t2` 中 `C1` 列的值修改为 `3` 的示例如下：

```shell
obclient> SET ob_trx_timeout = 1000000000;
Query OK, 0 rows affected

obclient> SELECT * FROM t2@ob_dblink;
+------+------+
| C1   | C2   |
+------+------+
|    2 |    2 |
+------+------+
1 row in set

obclient> UPDATE t2@ob_dblink SET C1 = 3;
Query OK, 1 row affected

obclient> commit;
Query OK, 0 rows affected

obclient> SELECT * FROM t2@ob_dblink;
+------+------+
| C1   | C2   |
+------+------+
|    3 |    2 |
+------+------+
1 rows in set

```

OceanBase 数据库 Oracle 模式支持把本地表数据写入（`INSERT`、`DELETE`、`UPDATE` 和 `MERGE INTO`）远端表，详细信息，参见 [通过 DBLink 修改远端数据库中的数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476653)。

## 相关文档

- [插入数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476122)
 - [删除数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476126)
 - [替换数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476123)
 - [通过 DBLink 修改远端数据库中的数据](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476653)

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