UPDATE
UPDATE 用于修改表中符合条件的行。
# 单逻辑表
UPDATE [LOW_PRIORITY] [IGNORE] [schema_name.]tbl_name
SET assignment_list
[WHERE where_condition]
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
# 多逻辑表
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
修饰符
UPDATE 支持如下修饰符:
- 若设置 LOW_PRIORITY,UPDATE 操作将在该表没有任何读操作之后执行
- 若设置 IGNORE,将会忽略更新过程中的错误,即更新不会被错误中断
目前,UPDATE 语句中的修饰符均会原样下推至底层 MySQL,不会对 DRDS 的行为产生影响。
语法限制
与 MySQL 的 UPDATE 语法相比,存在如下限制:
- 不支持 使用子查询(相关子查询和非相关子查询)
- 不支持 ORDER BY 和 LIMIT
- 不支持 更新逻辑表的拆分键字段,更新拆分键字段可能导致数据重新分布,DRDS 暂不支持
- 不支持 不可下推的多表更新
- 不支持 在多表更新中修改广播表(广播表中的列不可出现在 SET 中赋值语句的左侧)
如下 SQL 样例均暂不支持。
# 不支持 子查询
UPDATE t1 SET name = 'DRDS' WHERE id IN (SELECT id FROM t2 WHERE id > 10);
# 不支持 ORDER BY 和 LIMIT
UPDATE t1 SET name = 'DRDS' WHERE id > 10 ORDER BY id limit 10;
# 不支持 更新拆分键,t1 表的拆分键为 id
UPDATE t1 SET id = id + 1 WHERE id > 10;
# 不支持 不可下推的多表更新,t1 和 t2 的拆分键为 id
UPDATE t1, t2 SET t1.name = t2.name WHERE t1.id = t2.name;
# 不支持 在多表更新中修改广播表,t1 为广播表
UPDATE t1, t2 SET t1.name = t2.name WHERE t1.id = t2.id;
相关文献
- MySQL UPDATE 语法
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论