# UPDATE
#### 功能描述
更新HStore opt表上指定的数据。
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
- 如需使用实时数仓能力，请在DWS控制台创建集群时，选择**存算一体1:4云盘规格** ，了解更多参见[存算一体规格](https://support.huaweicloud.com/productdesc-dws/dws_01_00018.html)。
- 创建DWS集群选择**1:8云盘规格** 为标准数仓，**1:4云盘规格**为实时数仓，以下内容描述的"实时数仓"、"标准数仓"即通过以上规格区分。
 
#### 注意事项
- 与列存一样，当前版本HStore opt上的UPDATE操作始终先DELETE再INSERT。全局GUC参数可控制打开HStore opt的轻量化UPDATE，当前版本默认关闭。
- 对于并发UPDATE场景， 传统列存储格式由于同时操作相同CU时会产生锁冲突所以并发性能较差， 对于HStore opt表由于不需要阻塞等待，并发UPDATE性能可达到列存的百倍以上。
 
#### 语法格式
```
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进行调优](https://support.huaweicloud.com/devg-dws/dws_04_0455.html)。
  
- **table_name**
  要更新的表名，可以使用模式修饰。
  取值范围：已存在的表名称。
  
- **alias**
  目标表的别名。
  取值范围：字符串，符合标识符命名规范。
  
- **expression**
  赋予字段的值或表达式。
  
- **DEFAULT**
  用对应字段的缺省值填充该字段。
  如果没有缺省值，则为NULL。
  
- **from_list**
  一个表的表达式列表，允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。
  ![](https://support.huaweicloud.com/devg-dws/public_sys-resources/notice_3.0-zh-cn.png)
  目标表禁止出现在from_list里，除非在使用一个自连接（此时它必须以from_list的别名出现）。
  
- **condition**
  一个返回boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。
  
 
#### 示例
创建表reason_update：
```
CREATE TABLE reason_update
(
    TABLE_SK          INTEGER               ,
    TABLE_ID          VARCHAR(20)           ,
    TABLE_NA          VARCHAR(20)
)WITH(ORIENTATION=COLUMN, ENABLE_HSTORE_OPT=ON);
```
向表reason_update中插入数据：
```
INSERT INTO reason_update VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB');
```
对表reason_update执行UPDATE操作：
```
UPDATE reason_update SET TABLE_NA = 'TeacherD' where TABLE_SK = 3;
```
