分布式数据库中间件 DDM-不支持的特性和使用限制:SQL语法使用限制

时间:2024-09-26 16:09:41

SQL语法使用限制

SELECT

  • 不支持DISTINCTROW。
  • 不支持[HIGH_PRIORITY]、[STRAIGHT_JOIN]、 [SQL_SMALL_RESULT]、 [SQL_BIG_RESULT] 、[SQL_BUFFER_RESULT] 、[SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]等选项放在DDM实例下面。
  • 不支持SELECT ... GROUP BY ... WITH ROLLUP语句。
  • 不支持SELECT ... ORDER BY ... WITH ROLLUP语句。
  • 不支持WITH语句。
  • 不支持不同排序规则的联表查询。
  • 不支持窗口函数。
  • SELECT FOR UPDATE仅支持简单查询,不支持join、group by、order by、limit等语句。用于修饰FOR UPDATE的[NOWAIT | SKIP LOCKED]选项对于DDM无效。
  • 对于UNION中的每个SELECT, DDM暂不支持使用多个同名的列。
    例如:如下SQL的SELECT中存在重复的列名。
    SELECT id, id, name FROM t1 UNION SELECT pk, pk, name FROM t2;

排序与Limit

LIMIT/OFFSET参数支持范围为0-2147483647。

聚合

不支持group by语句后添加asc或desc函数来实现排序语义。
  • DDM自动忽略group by后的asc或desc关键字。
  • MySQL 8.0.13以下版本支持group by后添加asc或desc函数来实现排序语义,8.0.13及以上版本已废弃该用法,使用时会报语法错误。推荐使用order by语句来保证排序语义。

子查询

  • 不支持与grand parent query产生关联关系的子查询。
  • 不支持HAVING子句中的子查询,JOIN ON 条件中的子查询。
  • Derived Tables 必须拥有一个别名。
  • Derived Tables 不可以成为 Correlated Subqueries,即不能包含子查询外部表的引用。

LOAD DATA语法限制

  • 不支持LOW_PRIORITY。
  • 不支持CONCURRENT。
  • 不支持PARTITION (partition_name [, partition_name] ...)。
  • 不支持LINES STARTING BY 'string'。
  • 不支持用户变量。
  • ESCAPED BY 只支持'\\'。
  • 如果导入数据时没有指定自增键的值,DDM不会填充自增值,自增能力使用的是底层DN的自增能力,因此自增值会重复。
  • 如果主键或者唯一索引值经过路由后不在同一张物理表,REPLACE不生效。
  • 如果主键或者唯一索引值经过路由后不在同一张物理表,IGNORE不生效。
  • 不支持对含有全局二级索引的表执行LOAD DATA的操作。

INSERT 和 REPLACE

  • 不支持INSERT DELAYED...。
  • 不支持不包含拆分字段的INSERT。
  • 暂不支持PARTITION语法,建议不要使用partition表。
  • INSERT操作不支持datetime(YYYY-MM-DD HH:MM:SS)中“YYYY”取值1582年及之前年份。
  • INSERT不支持ON DUPLICATE KEY UPDATE 关联子查询列。
    INSERT INTO t1(a, b)
    SELECT * FROM(SELECT c, d FROM t2 UNION SELECT e, f FROM t3) AS dtest
    ON DUPLICATE KEY UPDATE b = b + c;

    示例ON DUPLICATE KEY UPDATE语句中引用了子查询列c。

  • INSERT和REPLACE不支持拆分键值为DEFAULT关键字。

UPDATE和DELETE

  • 不支持更新拆分键值为DEFAULT的关键字。
  • 不支持在一个语句中对同一字段重复更新。
  • 不支持关联更新拆分键。
    UPDATE tbl_1 a, tbl_2 b set a.name=b.name where a.id=b.id;

    示例中“name”为tbl_1的拆分键。

  • 不支持通过INSERT ON DUPLICATE KEY UPDATE更新拆分键。
  • 不支持自关联更新。
    UPDATE tbl_1 a, tbl_1 b set a.tinyblob_col=concat(b.tinyblob_col, 'aaabbb');
  • 不支持含有JSON类型字段的二级拆分表进行带子查询的拆分键更新。
  • 不支持不带关联条件的关联更新。
    不带关联条件的关联更新语句如下:
    UPDATE tbl_3, tbl_4 SET tbl_3.varchar_col='dsgfdg';
  • 关联更新不支持在目标列的赋值语句或表达式中引用其它目标列。
    UPDATE tbl_1 a, tbl_2 b SET a.name=concat(b.name, 'aaaa'),b.name=concat(a.name, 'bbbb') ON a.id=b.id;
  • 对拆分字段的更新,将转换成delete+insert两个阶段操作,操作中间不保证其它涉及到这张表中的拆分字段值的查询语句的一致性。
support.huaweicloud.com/productdesc-ddm/ddm_01_0174.html