UPDATE

    • 要修改表,用户必须对该表有UPDATE权限。
    • 对expression或condition条件里涉及到的任何表要有SELECT权限。
    • 对于列存表,暂时不支持RETURNING子句。
    • 列存表不支持结果不确定的更新(non-deterministic update)。试图对列存表用多行数据更新一行时会报错。
    • 列存表的更新操作,旧记录空间不会回收,需要执行VACUUM FULL table_name进行清理。
    • 对于列存复制表,暂不支持UPDATE操作。
    • plan_hint子句

      以/*+ */的形式在UPDATE关键字后,用于对UPDATE对应的语句块生成的计划进行hint调优,详细用法请参见章节。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。

    • table_name

      要更新的表名,可以使用模式修饰。

      取值范围:已存在的表名称。

    • alias

      目标表的别名。

      取值范围:字符串,符合标识符命名规范。

    • expression

      赋给字段的值或表达式。

    • DEFAULT

      用对应字段的缺省值填充该字段。

      如果没有缺省值,则为NULL。

    • sub_query

      使用同一数据库里其他表的信息来更新一个表可以使用子查询的方法。其中SELECT子句具体介绍请参考SELECT

    • from_list

      一个表的表达式列表,允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。

    • condition

      一个返回Boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。

    • output_expression

      在所有需要更新的行都被更新之后,UPDATE命令用于计算返回值的表达式。

      取值范围:使用任何table以及FROM中列出的表的字段。*表示返回所有字段。

    • 字段的返回名称。

    1. openGauss=# CREATE TABLE student1
    2. (
    3. stuno int,
    4. classno int
    5. );
    6. openGauss=# INSERT INTO student1 VALUES(1,1);
    7. openGauss=# INSERT INTO student1 VALUES(2,2);
    8. openGauss=# INSERT INTO student1 VALUES(3,3);
    9. --查看数据。
    10. openGauss=# SELECT * FROM student1;
    11. --直接更新所有记录的值。
    12. openGauss=# UPDATE student1 SET classno = classno*2;
    13. --查看数据。
    14. openGauss=# SELECT * FROM student1;