更新时间:2024-09-02 GMT+08:00

UPDATE

功能描述

更新HStore表上指定的数据。

注意事项

  • 与列存一样,当前版本HStore上的UPDATE操作始终先DELETE再INSERT。全局GUC参数可控制打开HStore的轻量化UPDATE,当前版本默认关闭。
  • 对于并发UPDATE场景, 传统列存储格式由于同时操作相同CU时会产生锁冲突所以并发性能较差, 对于HStore表由于不需要阻塞等待,并发UPDATE性能可达到列存的百倍以上。

语法格式

1
2
3
4
UPDATE [/*+ plan_hint */] [ ONLY ] table_name [ * ] [ [ AS ] alias ]
SET {column_name = { expression | DEFAULT } 
    |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...]
    [ FROM from_list] [ WHERE condition ];

参数说明

  • plan_hint子句

    以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优

  • table_name

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

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

  • alias

    目标表的别名。

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

  • expression

    赋给字段的值或表达式。

  • DEFAULT

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

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

  • from_list

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

    目标表绝对不能出现在from_list里,除非在使用一个自连接(此时它必须以from_list的别名出现)。

  • condition

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

示例

创建表reason_update:
1
2
3
4
5
6
CREATE TABLE reason_update
(
    TABLE_SK          INTEGER               ,
    TABLE_ID          VARCHAR(20)           ,
    TABLE_NA          VARCHAR(20)
)WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON);
向表reason_update中插入数据:
1
INSERT INTO reason_update VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB');
对表reason_update执行UPDATE操作:
1
UPDATE reason_update SET TABLE_NA = 'TeacherD' where TABLE_SK = 3;