阅读216 返回首页    go 微信


DML语法__用户指南_云数据库 PetaData-阿里云

SELECT语句

  1. Select EXPR, [distinct] T1.COL1, [T2.COL1], {count|sum|min|max}( T1.COL1), count([distinct] T1.COL1)
  2. from T1 [{join T2}1,n on T1.COL2 = T2.COL2]
  3. [where expr]
  4. group by [binary] COL1
  5. order by [BINARY] COL1 [limit m [offset n]]

说明:

  1. 1. 不支持for update/into从句;
  2. 2. 对于distinct复合语句,目前仅支持distinct分区键或count(distinct分区键);
  3. 3. 聚集函数不支持avg;
  4. 4. 跨分区聚合函数目前仅支持count/sum/min/max函数,仅支持varchar/integer/datetime/timestamp/date/time类型;
  5. 5. 不支持子查询;
  6. 6. 当前仅支持两个分区表join在分区键上且join条件为等值,或者分区表join广播表,不支持join在非分区字段上,也不支持join在分区字段非等值条件上;
  7. 7. 若列为timestamp类型,则不得设置精度;
  8. 8. where条件过滤以及跨分区group by/order by该列类型时,严格符合”YY-MM-DD HH:MM:SS”格式,否则将被视作字符串类型;
  9. 9. 对于group by/order by,当前支持整型、浮点型、日期时间型的比较,对于字符串的比较,当前仅能进行二进制大小比较,不支持使用各类字符集的比较;
  10. 10. group by/order by的列,必须出现在select从句中,如果是二进制比较,必须同时在select和group by/order by从句显式写明BINARY 列名,同时具备group by与order by从句时,二者的操作列必须完全相同;
  11. 11. 跨分区group by、order by目前仅支持varchar/integer/datetime/timestamp/date/time类型;
  12. 12. 不支持having从句;
  13. 13. 不支持order by random()/order by function()/order by #(列序号整数);
  14. 14. 不支持with从句;

INSERT语句

  1. insert [ignore] [into] T1 (COL1, COL2) values (VALUE11, VALUE12) [, (VALUE21, VALUE22)] [on duplicate key update COL3 = VALUE3]

说明:

  1. 1. 允许insert多个值,且这些值可以在任意多个分区;
  2. 2. 且跨分区的insert会自动进入一个一阶段提交分布式事务,不需要用户自行开启事务,但是在部分分区提交成功部分分区提交失败时,可能导致回滚不一致;
  3. 3. 若用户的表包含自增主键,则insert时该列的生成规则需遵守自增主键的使用方法;
  4. 4. insert时,列内容前不得附带字符集等前缀描述,如insert into t (f) values (_utf8’a’)是不支持的,且对于分区键,用户必须自行保证分区键的列定义,与用户insert时填入的列值是匹配的,若用户建表时列定义为整型,而insert时为浮点型或字符串型,则会因数据类型截断,导致数据分布紊乱;
  5. 5. on duplicate update从句的特性类似于replace,无法保证非分区字段的唯一性,语法上虽未禁止,但不建议用户使用,使用者请自行保证唯一性;
  6. 6. 不支持insert select从句;

UPDATE语句

  1. update T1 set COL1 = VALUE1, COL2 = VALUE2 where EXPR

说明:

  1. 1. 允许跨分区update,且跨分区的update会自动进入一个分布式事务,不需要用户自行开启事务,但是在部分分区提交成功部分分区提交失败时,可能导致回滚不一致;
  2. 2. 不允许更新主键和分区键,若需要变更主键和分区键,需要先delete后重新insert;
  3. 3. update时,列内容前不得附带字符集等前缀描述,如update t set f = _utf8’b’是不支持的;
  4. 4. 不支持update limit从句;

DELETE语句

  1. delete from T1 where EXPR

说明:

  1. 1. 允许跨分区delete,且跨分区的delete会自动进入一个分布式事务,不需要用户自行开启事务,但是在部分分区提交成功部分分区提交失败时,可能导致回滚不一致;
  2. 2. 允许delete整张表;
  3. 3. 不支持delete limit从句;

REPLACE语句

  1. replace [into] T1 (COL1, COL2) values (VALUE11, VALUE12) [, (VALUE21, VALUE22)]

说明:

  1. 1. 允许replace多个值,且这些值可以在任意多个分区,且跨分区的replace会自动进入一个分布式事务,不需要用户自行开启事务,但是在部分分区提交成功部分分区提交失败时,可能导致回滚不一致;
  2. 2. replace时,列内容前不得附带字符集等前缀描述,如replaceinto t (f) values (_utf8’a’)是不支持的,且对于分区键,用户必须自行保证分区键的列定义,与用户replace时填入的列值是匹配的,若用户建表时列定义为整型,而replace时为浮点型或字符串型,则会因数据类型截断,导致数据分布紊乱;
  3. 3. 不支持replace set从句;

EXPLAIN DML语句

  1. 1. 目前支持EXPLAIN语句,可以分析DML语句的执行计划,影响的分区,结果合并的流程等;
  2. 2. 若DML语句的执行计划涉及到了多个分区,则应尽量利用where条件将查询和更新限制在单个分区,如where 分区键 = 分区键值;

表达式

对于select、update、delete附带的where从句,任何列值与字符串字面值的二元比较操作,如Col =|>|<|>=|<=|!=|<> Value等,都必须将列名放在左边,比较值放在右边;

函数

  1. 1. 不支持类型转换类函数;
  2. 2. select rds_partition_insert_id()用于获取一个全局唯一的id,可充当表主键等;

最后更新:2016-11-23 16:03:54

  上一篇:go DDL语法__用户指南_云数据库 PetaData-阿里云
  下一篇:go 事务说明__用户指南_云数据库 PetaData-阿里云