描述

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

格式

  1. UPDATE [hint_options] dml_table_clause
  2. SET update_asgn_list
  3. [WHERE where_condition]
  4. [{ RETURNING | RETURN } returning_exprs [into_clause]]
  5. dml_table_clause:
  6. dml_table_name opt_table_alias
  7. update_asgn_list:
  8. column_name = expr [, ...]
  9. where_condition:
  10. expression
  11. returning_exprs:
  12. projection [, ...]
  13. into_clause:
  14. { INTO into_var_list | BULK COLLECT INTO into_var_list}
  15. into_var_list:
  16. { USER_VARIABLE | ref_name } [, ...]

参数解释

参数

描述

hint_options

指定 hint 选项。

dml_table_clause

指定修改的表名(基表、可更新视图、特殊子查询)

where_condition

指定过滤条件。

update_asgn_list

指定更新列表。

returning_exprs

返回修改数据后的投影列。

into_clause

将修改数据后的投影列插入到指定列表

注意

特殊子查询指的类似于可更新视图对应的子查询,这类子查询不应该包含复杂的算子(比如group by/distinct/window function等等)

示例

创建示例表 t1 和 t2。

  1. OceanBase(admin@test)>create table t1(c1 int primary key, c2 int);
  2. Query OK, 0 rows affected (0.16 sec)
  3. OceanBase(admin@test)>select * from t1;
  4. +----+------+
  5. | c1 | c2 |
  6. +----+------+
  7. | 1 | 1 |
  8. | 2 | 2 |
  9. | 3 | 3 |
  10. | 4 | 4 |
  11. +----+------+
  12. 4 rows in set (0.06 sec)
  • 单表更新:将表 t1 中 “t1.c1=1” 对应的那一行数据的 c2 列值修改为 100。
  1. OceanBase(admin@test)>update t1 set t1.c2 = 100 where t1.c1 = 1;
  2. Query OK, 1 row affected (0.02 sec)
  3. Rows matched: 1 Changed: 1 Warnings: 0
  4. OceanBase(admin@test)>select * from t1;
  5. +----+------+
  6. | c1 | c2 |
  7. +----+------+
  8. | 1 | 100 |
  9. | 2 | 2 |
  10. | 3 | 3 |
  11. | 4 | 4 |
  12. +----+------+
  13. 4 rows in set (0.01 sec)
  • 单表更新:直接操作子查询,将子查询 中 “v.c1=1” 对应的那一行数据的 c2 列值修改为 100。
  1. OceanBase(admin@test)>update (select * from t1)v set v.c2 = 100 where v.c1 = 1;
  2. Query OK, 1 row affected (0.02 sec)
  3. Rows matched: 1 Changed: 1 Warnings: 0
  4. OceanBase(admin@test)>select * from t1;
  5. +----+------+
  6. | C1 | C2 |
  7. +----+------+
  8. | 1 | 100 |
  9. | 2 | 2 |
  10. | 3 | 3 |
  11. | 4 | 4 |
  12. +----+------+
  13. 4 rows in set (0.01 sec)
  • 单表更新:包含 returning 子句。
  1. OceanBase(admin@test)>update t1 set t1.c2 = 100 where t1.c1 = 1 returning c2;
  2. +------+
  3. | C2 |
  4. +------+
  5. | 100 |
  6. +------+
  7. 1 row in set (0.02 sec)
  8. OceanBase(admin@test)>select * from t1;
  9. +----+------+
  10. | C1 | C2 |
  11. +----+------+
  12. | 1 | 100 |
  13. | 2 | 2 |
  14. | 3 | 3 |
  15. | 4 | 4 |
  16. +----+------+
  17. 4 rows in set (0.01 sec)