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的行才会被更新。
示例
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); |
1
|
INSERT INTO reason_update VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); |
1
|
UPDATE reason_update SET TABLE_NA = 'TeacherD' where TABLE_SK = 3; |