首批通过分布式安全可靠测评,为关键业务系统打造
UPDATE
更新时间:2026-03-29 12:02:41
描述
该语句用于修改表中现有的的字段值。
语法
UPDATE [hint_options] dml_table_clause
SET update_asgn_list
[ WHERE where_condition]
[{ RETURNING | RETURN } returning_exprs [into_clause]]
dml_table_clause:
dml_table_name opt_table_alias
update_asgn_list:
column_name = expr [, expr...]
where_condition:
expression
returning_exprs:
projection_col_name [,projection_col_name ...]
into_clause:
{ INTO into_var_list | BULK COLLECT INTO into_var_list}
into_var_list:
{ USER_VARIABLE | ref_name } [,{ USER_VARIABLE | ref_name } ...]
参数解释
| 参数 | 描述 |
|---|---|
| hint_options | 指定 Hint 选项。 |
| dml_table_clause | 指定要更新的表、视图、或特殊子查询返回的列的名称。 说明 如果指定 view,则数据库更新视图的基表。但是不能通过一个视图更新多个基表。 |
| where_condition | 指定过滤条件。 |
| update_asgn_list | 指定更新列表。 |
| returning_exprs | 返回修改数据后的投影列。 |
| into_clause | 将修改数据后的投影列插入到指定列表。 |
| into_var_list | 将指定投影列插入到指定变量列表。 |
| ref_name | 变量名。 |
注意
特殊子查询指的类似于可更新视图对应的子查询,这类子查询不应该包含复杂的算子(例如 GROUP BY、DISTINCT、WINDOW FUNCTION 等)。
示例
创建示例表 tbl1,并插入测试数据。
obclient> CREATE TABLE tbl1(col1 INT PRIMARY KEY,col2 INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES(1,1),(2,2),(3,3),(4,4),(5,5);
Query OK, 5 rows affected
Records: 5 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM tbl1;
+------+------+
| COL1 | COL2 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
+------+------+
5 rows in set
单表更新:将表
tbl1中tbl1.col1=1对应的那一行数据的col2列值修改为100。obclient> UPDATE tbl1 SET tbl1.col2 = 100 WHERE tbl1.col1 = 1; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM tbl1; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 100 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | +------+------+ 5 rows in set单表更新:直接操作子查询,将子查询中
v.col1=1对应的那一行数据的col2列值修改为10。obclient> UPDATE (SELECT * FROM tbl1) v SET v.col2 = 10 WHERE v.col1 = 1; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0 obclient> SELECT * FROM tbl1; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 10 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | +------+------+ 5 rows in set单表更新:将表
tbl1中tbl1.col1<3对应的那一行数据的col2列值修改为100。obclient> UPDATE tbl1 SET tbl1.col2 = 100 WHERE tbl1.col1 < 3; Query OK, 2 rows affected Rows matched: 2 Changed: 2 Warnings: 0 obclient> SELECT * FROM tbl1; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 100 | | 2 | 100 | | 3 | 3 | | 4 | 4 | | 5 | 5 | +------+------+ 5 rows in set单表更新:
RETURNING子句返回修改后数据。obclient> UPDATE tbl1 SET tbl1.col2 = 1000 WHERE tbl1.col1 = 1 RETURNING col2; +------+ | COL2 | +------+ | 1000 | +------+ 1 row in set obclient> SELECT * FROM tbl1; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 1000 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | +------+------+ 5 rows in set