---
title: "UPDATE - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: "UPDATE 描述 该语句用于修改表中的字段值。 语法 UPDATE [IGNORE] table_references SET update_asgn_list [WHERE where_condition] [ORDER BY order_list] [LIMIT row_count]; table_refere…"
---
切换语言

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

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

# UPDATE

更新时间：2026-04-10 11:58:35

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/9000.update-of-mysql-mode.md)  

## 描述

该语句用于修改表中的字段值。

## 语法

```sql
UPDATE [IGNORE] table_references
    SET update_asgn_list
    [WHERE where_condition]
    [ORDER BY order_list]
    [LIMIT row_count];

table_references:
    table_name [PARTITION (partition_name,...)] [, ...]

update_asgn_list:
    column_name = expr [, ...]

order_list:
    column_name [ASC|DESC] [, column_name [ASC|DESC]...]

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| IGNORE | 在 `INSERT` 语句执行过程中发生的错误将会被忽略。 |
| table_references | 指定修改表名，多表修改时，表名以逗号（,）分隔。 |
| where_condition | 指定过滤条件。 |
| row_count | 限制的行数。 |
| table_name | 插入表名。 |
| partition_name | 插入表指定的分区名。 |
| column_name | 列名。 |
| ASC | 按列名升序修改。 |
| DESC | 按列名降序修改。 |

## 说明

不管是多表还是单表更新都不支持直接对子查询进行更新值操作，否则会报错。示例如下：

```sql
obclient> UPDATE (SELECT * FROM T1) SET C1 = 100;
ERROR 1288 (HY000): The target table  of the UPDATE is not updatable

```

## 示例

1. 创建示例表 `t1` 和 `t2`。

   ```sql
   obclient> CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT);
   Query OK, 0 rows affected
   obclient> SELECT * FROM t1;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  1 |    1 |
   |  2 |    2 |
   |  3 |    3 |
   |  4 |    4 |
   +----+------+
   4 rows in set

   obclient> CREATE TABLE t2(c1 INT PRIMARY KEY, c2 INT) PARTITION BY KEY(c1) PARTITIONS 4;
   Query OK, 0 rows affected
   obclient> SELECT * FROM t2;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  5 |    5 |
   |  1 |    1 |
   |  2 |    2 |
   |  3 |    3 |
   +----+------+
   4 rows in set

   ```
 2. 将表 `t1` 中 `t1.c1=1` 对应的那一行数据的 `c2` 列值修改为 `100`。

   ```sql
   obclient> UPDATE t1 SET t1.c2 = 100 WHERE t1.c1 = 1;
   Query OK, 1 row affected
   Rows matched: 1  Changed: 1  Warnings: 0

   obclient> SELECT * FROM t1;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  1 |  100 |
   |  2 |    2 |
   |  3 |    3 |
   |  4 |    4 |
   +----+------+
   4 rows in set

   ```
 3. 将表 `t1` 中按照 `c2` 列排序的前两行数据的 `c2` 列值修改为 `100`。

   ```sql
   obclient> UPDATE t1 SET t1.c2 = 100 ORDER BY c2 LIMIT 2;
   Query OK, 2 rows affected
   Rows matched: 2  Changed: 2  Warnings: 0

   obclient> SELECT * FROM t1;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  1 |  100 |
   |  2 |  100 |
   |  3 |    3 |
   |  4 |    4 |
   +----+------+
   4 rows in set

   ```
 4. 将表 `t2` 中 `p2` 分区的数据中 `t2.c1 > 2` 的对应行数据的 `c2` 列值修改为 `100`。

   ```sql
   obclient> UPDATE t2 PARTITION(p2) SET t2.c2 = 100 WHERE t2.c1 > 2;
   Query OK, 1 row affected
   Rows matched: 1  Changed: 1  Warnings: 0

   obclient> SELECT * FROM t2;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  5 |    5 |
   |  1 |    1 |
   |  2 |    2 |
   |  3 |  100 |
   +----+------+
   4 rows in set

   ```
 5. 修改多个表，将 `t1` 表和 `t2` 表中满足`t1.c1 = t2.c1` 对应行的数据 `t1` 表中的 `c2` 列值修改为 `100`，`t2` 表中的 `c2` 列值修改为 `200`。

   ```sql
   obclient> UPDATE t1,t2 SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2;
   Query OK, 6 rows affected
   Rows matched: 6  Changed: 6  Warnings: 0

   obclient> SELECT * FROM t1;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  1 |  100 |
   |  2 |  100 |
   |  3 |  100 |
   |  4 |    4 |
   +----+------+
   4 rows in set

   obclient> SELECT * FROM t2;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  5 |    5 |
   |  1 |  200 |
   |  2 |  200 |
   |  3 |  200 |
   +----+------+
   4 rows in set

   ```
 6. 修改多个表。修改 `t1` 表和 `t2` 表的 `p2` 分区中满足 `t1.c1 = t2.c1` 对应行的数据 `t1` 表中的 `c2` 列值修改为 `100`，`t2` 表中的 `c2` 列值修改为 `200`。

   ```sql
   obclient> UPDATE t1,t2 PARTITION(p2) SET t1.c2 = 100, t2.c2 = 200 WHERE t1.c2 = t2.c2;
   Query OK, 6 rows affected
   Rows matched: 6  Changed: 6  Warnings: 0

   ```
 7. 对可更新视图 `v` 进行更新值。

   ```sql
   obclient> CREATE VIEW v AS SELECT * FROM t1;
   Query OK, 0 rows affected

   obclient> UPDATE v SET v.c2 = 100 WHERE v.c1 = 1;
   Query OK, 1 row affected
   Rows matched: 1  Changed: 1  Warnings: 0

   obclient> SELECT * FROM v;
   +----+------+
   | c1 | c2   |
   +----+------+
   |  1 |  100 |
   |  2 |    2 |
   |  3 |    3 |
   |  4 |    4 |
   +----+------+
   4 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) 咨询热线
