• 沒有找到結果。

15.3.1 INSERT

INSERT是将数据插入到数据库对象中的指令。

常用语法

INSERT [INTO] tbl_name [(col_name,...)]

{VALUES | VALUE} ({expr },...),(...),...

[ ON DUPLICATE KEY UPDATE col_name=expr

[, col_name=expr] ... ] ORINSERT [INTO] tbl_name

SET col_name={expr | DEFAULT}, ...

[ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]

语法限制

● 不支持INSERT DELAYED...;

● 不支持不包含拆分字段的INSERT;

● 暂不支持PARTITION 语法,建议不要使用partition表;

● INSERT操作不支持“datetime”字段取值1582年及之前年份;

● INSERT操作不支持插入拆分键值为DEFAULT关键字;

● 拆分表执行INSERT操作时如果指定了自增值,只影响该插入数据的自增值。后续 数据插入时如果不指定自增值,仍以原自增值为基础进行自增;

15.3.2 REPLACE

REPLACE用于往表中插入行或替换表中的行。

常用语法

replace into table(col1,col2,col3) values(value1,value2,value3)

语法限制

● 暂不支持PARTITION 语法;

● 当自增表格ID不存在时,使用REPLACE将会插入一条指定ID的数据,但不会自动 生成ID。

15.3.3 DELETE

DELETE指令为用于删除表中符合条件的行。

常用语法

DELETE [IGNORE]

FROM tbl_name [WHERE where_condition]

语法限制

● WHERE 条件中不支持子查询(相关子查询和非相关子查询);

● 不支持在多表删除中删除广播表中的数据(目标表列表中不可包含广播表)。

15.3.4 UPDATE

常用语法

UPDATE table_reference

SET col_name1={expr1} [, col_name2={expr2}] ...

[WHERE where_condition]

语法限制

● 不支持使用子查询(相关子查询和非相关子查询);

● UPDATE语句中的where_condition不支持计算表达式及其子查询;

● 不支持在多表更新中修改广播表(广播表中的列不可出现在 SET 中赋值语句的左 侧);

● 不支持更新逻辑表的拆分键字段,更新拆分键字段可能导致数据重新分布,DDM 暂不支持;

● UPDATE操作不支持“datetime”字段取值1582年及之前年份;

● UPDATE操作不支持更新拆分键值为DEFAULT关键字;

● UPDATE不支持在一个语句中对同一字段重复更新;

● UPDATE不支持关联更新拆分键;

● UPDATE不支持自关联更新;

● 关联更新中,不支持在目标列的赋值语句或表达式中引用其它目标列,将造成更 新结果不符合预期。例如:

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。

● 关联更新不支持不带关联条件的Join;

15.3.5 SELECT

SELECT通常用于查询一个或多个表中的数据。

常用语法

SELECT

[ALL | DISTINCT | DISTINCTROW ] select_expr

[, select_expr ...]

[FROM table_references [WHERE where_condition]

[GROUP BY {col_name | expr | position} [ASC | DESC], ...]

[HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

15-24 说明信息

语法 说明

select_expr 每个select_expr都指示一个您想要查询的列。

FROM table_references 指您将从哪个或哪些表中查询。

WHERE 关键词WHERE其后跟一个表达式,用于表示被选择的 行所须满足的条件。

GROUP BY 语法中被使用的子句将按一定的顺序排列,GROUP BY 表示语句间关系,支持列名。如一个HAVING子句必须 位于GROUP BY子句之后,并在ORDER BY子句之前。

ORDER BY 语法顺序排列的一种方式,表示语句间关系,支持列 名和指定的排序方式(如ASC、 DESC)。

LIMIT/OFFSET 对输出结果集的偏移量及大小给予约束,如:LIMIT接 受一个或者两个数字参数。

语法说明

● 暂不支持以空字符串作为别名;

● 不支持select ... group by ... with rollup;

● 暂不支持 STRAIGHT_JOIN 和 NATURAL JOIN;

● select for update 仅支持简单查询,不支持 join、group by、order by、limit;

● 对于 UNION 中的每个 SELECT, DDM 暂不支持使用多个同名的列,如下:

# 如下 SQL 的 SELECT 中存在重复的列名,暂不支持SELECT id, id, name FROM t1 UNION SELECT pk, pk, name FROM t2。

15.3.6 SELECT JOIN Syntax

常用语法

table_references:

table_reference [, table_reference] ...

table_reference:

table_factor | join_table

table_factor:

tbl_name [[AS] alias]

| table_subquery [AS] alias

| ( table_references )

join_table:

table_reference [INNER | CROSS] JOIN table_factor [join_condition]

| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition

| table_reference [{LEFT|RIGHT} [OUTER]] JOIN table_factor

join_condition:

ON conditional_expr

| USING (column_list)

语法限制

不支持SELECT STRAIGHT_JOIN 和 NATURAL JOIN。

示例

select id,name from test1 where id=1;

select distinct id,name from test1 where id>=1;

select id,name from test1 order by id limit 2 offset 2;

select id,name from test1 order by id limit 2,2;

select 1+1,'test',id,id*1.1,now() from test1 limit 3;

select current_date,current_timestamp;

select abs(sum(id)) from test1;

15.3.7 SELECT UNION Syntax

常用语法

SELECT ...UNION [ALL | DISTINCT]

SELECT ...[UNION [ALL | DISTINCT] SELECT ...]

示例

select userid from user union select orderid from ordertbl order by userid;

select userid from user union (select orderid from ordertbl group by orderid) order by userid;

语法限制

对于UNION中的每个SELECT,不支持使用多个同名的列。

15.3.8 SELECT Subquery Syntax

The Subquery as Scalar Operand

示例

SELECT (SELECT id FROM test1 where id=1);

SELECT (SELECT id FROM test2 where id=1)FROM test1;

SELECT UPPER((SELECT name FROM test1 limit 1)) FROM test2;

Comparisons Using Subqueries

语法

non_subquery_operand comparison_operator (subquery) comparison_operator := > < >= <= <> != <=> like

示例

select name from test1 where id > (select id from test2 where id=1);

select name from test1 where id = (select id from test2 where id=1);

select id from test1 where name like (select name from test2 where id=1);

Subqueries with ANY, IN, NOT IN, SOME,ALL,Exists,NOT Exists

语法

operand comparison_operator SOME (subquery) operand comparison_operator ALL (subquery) operand comparison_operator ANY (subquery) operand IN (subquery)

operand not IN (subquery) operand exists (subquery) operand not exists (subquery)

示例

select id from test1 where id > any (select id from test2);

select id from test1 where id > some (select id from test2);

select id from test1 where id > all (select id from test2);

select id from test1 where id in (select id from test2);

select id from test1 where id not in (select id from test2);

select id from test1 where exists (select id from test2 where id=1);

select id from test1 where not exists (select id from test2 where id=1);

Derived Tables (Subqueries in the FROM Clause)

语法

SELECT ... FROM (subquery) [AS] tbl_name ...

示例

select id from (select id,name from test2 where id>1) a order by a.id;

语法限制

● Derived Tables 必须拥有一个别名。

● Derived Tables 不可以成为 Correlated Subqueries,即不能包含子查询外部表的 引用。

● 标量子查询在一些场景下当前不能得到正确结果,建议改写为join,同时可提高性 能。

● 不支持 HAVING 子句中的子查询,JOIN ON 条件中的子查询。

● 不支持Row Subqueries。

15.3.9 不支持的 DML 语法列举

不支持的 DML 语法

15-25 DML 的语法限制 DML语法 限制条件

DELETE语句 不支持PARTITION子句。

UPDATE语句 ● 不支持跨分片子查询。

● 不支持拆分键的更新。

SELECT语句 不支持类似ORDER BY FIELD(id,1,2,3)这种自定义排序。

系统库查询 支持以下系统库查询:

SELECT version()

● information_schema.SCHEMA_PRIVILEGES

● information_schema.TABLE_PRIVILEGES

● information_schema.USER_PRIVILEGES

● information_schema.SCHEMATA

● information_schema.tables

● information_schema.columns

SHOW KEYS FROM `table ` FROM `database 说明

● 仅支持=、in、like三种操作符,和and条件关联。

● 不支持子查询、关联查询、排序、聚合查询、LIMIT等等复杂查询。

● information_schema.tables和information_schema.columns支持<>操作 符。