全部产品
云市场

UPDATE

更新时间:2019-03-04 14:51:23

UPDATE 用于修改表中符合条件的行。

  1. # 单逻辑表
  2. UPDATE [LOW_PRIORITY] [IGNORE] [schema_name.]tbl_name
  3. SET assignment_list
  4. [WHERE where_condition]
  5. value:
  6. {expr | DEFAULT}
  7. assignment:
  8. col_name = value
  9. assignment_list:
  10. assignment [, assignment] ...
  11. # 多逻辑表
  12. UPDATE [LOW_PRIORITY] [IGNORE] table_references
  13. SET assignment_list
  14. [WHERE where_condition]

修饰符

UPDATE 支持如下修饰符:

  • 若设置 LOW_PRIORITY,UPDATE 操作将在该表没有任何读操作之后执行
  • 若设置 IGNORE,将会忽略更新过程中的错误,即更新不会被错误中断

目前,UPDATE 语句中的修饰符均会原样下推至底层 MySQL,不会对 DRDS 的行为产生影响。

语法限制

与 MySQL 的 UPDATE 语法相比,存在如下限制:

  • 不支持 使用子查询(相关子查询和非相关子查询)
  • 不支持 ORDER BY 和 LIMIT
  • 不支持 更新逻辑表的拆分键字段,更新拆分键字段可能导致数据重新分布,DRDS 暂不支持
  • 不支持 不可下推的多表更新
  • 不支持 在多表更新中修改广播表(广播表中的列不可出现在 SET 中赋值语句的左侧)

如下 SQL 样例均暂不支持。

  1. # 不支持 子查询
  2. UPDATE t1 SET name = 'DRDS' WHERE id IN (SELECT id FROM t2 WHERE id > 10);
  3. # 不支持 ORDER BY 和 LIMIT
  4. UPDATE t1 SET name = 'DRDS' WHERE id > 10 ORDER BY id limit 10;
  5. # 不支持 更新拆分键,t1 表的拆分键为 id
  6. UPDATE t1 SET id = id + 1 WHERE id > 10;
  7. # 不支持 不可下推的多表更新,t1 和 t2 的拆分键为 id
  8. UPDATE t1, t2 SET t1.name = t2.name WHERE t1.id = t2.name;
  9. # 不支持 在多表更新中修改广播表,t1 为广播表
  10. UPDATE t1, t2 SET t1.name = t2.name WHERE t1.id = t2.id;

相关文献