3.2.4 UPDATE

3.2.4.1 Single-Table Syntax

3.2.4.1.1 Syntax
UPDATE 
    table_reference
    SET assignment_list
    [WHERE where_condition]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...
3.2.4.1.2 与MySQL语法区别

下文中红色表示不支持的语法或关键字

UPDATE 
-   [LOW_PRIORITY] [IGNORE] 
    table_reference
    SET assignment_list
    [WHERE where_condition]
-   [ORDER BY ...]
-   [LIMIT row_count]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...
3.2.4.1.3 举例
UPDATE  test SET VALUE =1 where id=5;
3.2.4.1.4 限制
  • 原则上UPDATE语句中的where_condition部分只允许出现简单的条件,不能支持计算表达式以及子查询

3.2.4.2 Multiple-Table Syntax

  • 原则上不支持多表Join 的UPDATE
  • 存在特例,当update满足以下判断条件时,部分复杂UPDATE语句会在确保数据正确的情况下被下发执行

    • 包括update语句操作多表的时候,【操作的全是全局表,并拥有同样的分片范围,并且where条件中不含有子查询】或 【所有操作的表都有条件显式路由到同一个节点,并且where条件不含有子查询】
    • 包括update语句操作单表,但是where条件中包含子查询时,【被操作的表格是单节点表,where条件中的所有表格都有条件能路由到同一个节点】或【被操作的表格是全局表或者分片表,其余所有表格都是全局表,并且分片范围都能覆盖被操作的表格(需注意“分片范围”指的是 配置文件里面配的表分片范围,而不是经过 where 二次筛选后的范围。)】
  • 支持多表情况下的整体下发:where条件包含所有表的分片字段,并且存在ER关系,此时SQL是可以整体下发到多个节点

  • 支持部分场景下的update多表:
    • 目前只支持两张表的update,一张表为更新的表,另一张表为查询的表,查询的表支持子查询的形式
    • 支持更改同一张表的多个字段,不支持更改多个表的字段
    • set、where不包含子查询、表达式
3.2.4.2.1 Syntax
UPDATE 
    table_references
    SET assignment_list
    [WHERE where_condition]
3.2.4.2.2 与MySQL语法区别

下文中红色表示不支持的语法或关键字

UPDATE 
-   [LOW_PRIORITY] [IGNORE] 
    table_references
    SET assignment_list
    [WHERE where_condition]

results matching ""

    No results matching ""