DML
概述 |
详细语法说明 |
差异 |
---|---|---|
DELETE支持从指定分区(或子分区)删除数据 |
DELETE |
- |
UPDATE支持ORDER BY和LIMIT |
UPDATE |
- |
SELECT INTO语法 |
SELECT |
|
REPLACE INTO语法 |
REPLACE |
时间类型初始值的差异。例如:
|
SELECT支持指定多分区查询 |
SELECT |
- |
UPDATE支持指定多分区更新 |
UPDATE |
- |
LOAD DATA导入数据功能 |
LOAD DATA |
在使用LOAD DATA导入数据功能时,GaussDB与MySQL相比有如下差异:
|
INSERT支持VALUES引用列语法 |
INSERT INTO tabname VALUES(1,2,3) ON DUPLICATE KEY UPDATE b = VALUES(column_name) |
GaussDB的ON DUPLICATE KEY UPDATE子句中的VALUES()不支持表名.列名格式,MySQL支持。 |
LIMIT限制差异 |
DELETE、SELECT、UPDATE |
各个语句的limit子项与MySQL的limit项当前存在差异。 GaussDB中limit参数最大值为BIG INT类型限制(超过9223372036854775807报错)。在MySQL中,limit最大值为unsigned LONGLONG类型限制(超过18446744073709551615 报错)。 limit可以设置小数值,实际执行时四舍五入。MySQL不能取小数。 GaussDB的DELETE语句中,不允许limit 0。MySQL在DELETE语句中允许limit 0。 |
反斜杠(\)用法差异 |
INSERT |
反斜杠(\)的用法在GaussDB和MySQL中都可以由参数控制但当前默认用法不同: MySQL中使用参数NO_BACKSLASH_ESCAPES控制字符串和标识符中的反斜杠(\)被解析为普通字符还是转义字符,默认反斜杠字符(\)作为字符串和标识符中的转义字符。使用“set sql_mode='NO_BACKSLASH_ESCAPES';”语句可以禁用反斜杠字符(\)作为字符串和标识符中的转义字符。 GaussDB中使用参数standard_conforming_strings控制字符串和标识符中的反斜杠(\)被解析为普通字符还是转义字符。默认值为on,在普通字符串文本中按照SQL标准把反斜杠(\)当普通文本。使用“set standard_conforming_strings=off;”语句将反斜杠字符(\)作为字符串和标识符中的转义字符。 |
插入值少于字段数目时,MySQL报错,GaussDB补充空值。 |
INSERT |
GaussDB不指定列的列表时,如果插入值少于字段数目,默认按建表时的字段顺序赋值。字段上有非空约束时报错,没有非空约束时,如果指定了默认值则缺省部分补充默认值,若未指定默认值则补充空。 |
ORDER BY中排序的列必须包括在结果集的列中。 |
SELECT |
在GaussDB中,在与GROUP BY子句一起使用的情况下,ORDER BY中排序的列必须包括在SELECT语句所检索的结果集的列中。在与DISTINCT关键字一起使用的情况下,ORDER BY中排序的列必须包括在SELECT语句所检索的结果集的列中。 |
不允许对约束字段用 ON DUPLICATE KEY UPDATE 进行修改。 |
INSERT |
- |
SELECT结果允许存在重复列名。 |
SELECT |
- |
NATURAL JOIN与MySQL有差异。 |
SELECT |
在GaussDB中,NATURAL [ [LEFT | RIGHT] OUTER] JOIN允许不指定LEFT | RIGHT,不指定时NATURAL OUTER JOIN为NATURAL JOIN。允许连续使用多次JOIN。 |
外键数据类型是timestamp/datetime时,UPDATE/DELETE外表报错。 |
UPDATE/DELETE |
外键数据类型是timestamp/datetime时,UPDATE/DELETE外表报错,MySQL成功。 |
nature join和using兼容。 |
SELECT |
|
with clause兼容MySQL 8.0版本 |
SELECT 、INSERT、UPDATE、DELETE |
- |
join兼容 |
SELECT |
GaussDB join不支持使用逗号“,”的连接方式,MySQL支持。 GaussDB不支持use index for join。 |
SELECT语句中列表达式为函数表达式、算数表达式等情形时,查询结果显示的列名为 ?column? |
SELECT |
GaussDB SELECT语句中列表达式为函数表达式、算数表达式等情形时,查询结果显示的列名为 ?column?,MySQL为对应表达式。 |
SELECT导出文件(into outfile) |
SELECT ... INTO OUFILE ... |
SELECT INTO OUTFILE语法,导出文件中FLOAT、DOUBLE、REAL类型的值显示精度和MySQL存在差异,不影响COPY导入和导入后的值。 |
UPDATE/INSERT/REPLACE ... SET指定模式名、表名 |
UPDATE/INSERT/REPLACE ... SET |
UPDATE/REPLACE SET中,MySQL的三段式用法为database.table.column;GaussDB的三段式用法为table.column.filed,其中filed为指定复合类型中的属性。二者存在差异。 INSERT ... SET中,MySQL支持使用column、table.column和database.table.column;GaussDB只支持使用column,不支持使用table.column和database.table.column,二者存在差异。 |
UPDATE SET执行顺序与MySQL存在差异 |
UPDATE ... SET |
MySQL中,UPDATE SET的顺序是从前往后依次UPDATE,前面UPDATE的结果会影响后面的结果,且允许多次设置同一列;GaussDB中为先取出原来的所有相关的数据,再一次性UPDATE,且不允许多次设置同一列,二者存在差异。 |
IGNORE特性 |
UPDATE/DELETE/INSERT |
MySQL数据库和GaussDB执行过程的差异,因此产生的WARNING条数和WARNING信息可能存在不同。 |
SHOW COLUMNS语法 |
SHOW |
|
SHOW CREATE DATABASE语法 |
SHOW |
用户权限验证与MySQL存在差异。
|
SHOW CREATE TABLE语法 |
SHOW |
|
SHOW CREATE VIEW语法 |
SHOW |
|
SHOW PROCESSLIST语法 |
SHOW |
GaussDB中该命令的查询结果中的字段内容和大小写与information_schema.processlist视图内字段内容与大小写保持一致,MySQL中可能存在差异。
|
SHOW [STORAGE] ENGINES |
SHOW |
GaussDB中该命令的查询结果中的字段内容和大小写与information_schema.engines视图内字段内容与大小写保持一致,MySQL中可能存在差异。因为MySQL与GaussDB的存储引擎不同,所以该指令查询的结果不同。 |
SHOW [SESSION] STATUS |
SHOW |
GaussDB中该命令的查询结果中的字段内容和大小写与information_schema.session_status视图内字段内容与大小写保持一致,MySQL中可能存在差异。GaussDB中当前仅支持Threads_connected和Uptime。 |
SHOW [GLOBAL] STATUS |
SHOW |
GaussDB中该命令的查询结果中的字段内容和大小写与information_schema.global_status视图内字段内容与大小写保持一致,MySQL中可能存在差异。GaussDB中当前仅支持Threads_connected和Uptime。 |
SHOW INDEX |
SHOW |
|
SHOW SESSION VARIABLES |
SHOW |
GaussDB中查询结果中字段内容及大小写与information_schema.session_variables视图内字段内容及大小写保持一致,与MySQL可能存在差异。 |
SHOW GLOBAL VARIABLES |
SHOW |
GaussDB中查询结果中字段内容及大小写与information_schema.global_variables视图内字段内容及大小写保持一致,与MySQL可能存在差异。 |
SHOW CHARACTER SET |
SHOW |
GaussDB中查询结果中字段内容及大小写与information_schema.character_sets视图内字段内容及大小写保持一致,与MySQL可能存在差异。 |
SHOW COLLATION |
SHOW |
GaussDB中查询结果中字段内容及大小写与information_schema.collations视图内字段内容及大小写保持一致,与MySQL可能存在差异。 |
EXCEPT语法 |
SELECT |
- |
SELECT支持STRAIGHT_JOIN语法 |
SELECT |
GaussDB中多表关联JOIN场景下生成的执行计划,与MySQL可能存在差异。 |
SHOW TABLES |
SHOW |
|
SHOW TABLE STATUS |
SHOW |
|
HAVING语法 |
SELECT |
GaussDB的HAVING必须且只能引用GROUP BY子句中的列或聚合函数中使用的列。MySQL支持对此行为的扩展,并允许HAVING引用列表中的SELECT列和外部子查询中的列。 |
SELECT后跟行表达式 |
SELECT |
MySQL不支持SELECT后跟行表达式,GaussDB支持SELECT后跟行表达式。 MySQL的行为: mysql> SELECT row(1,2); ERROR 1241 (21000): Operand should contain 1 column(s) GaussDB的行为: m_db=# SELECT row(1,2); row(1,2) ---------- (1,2) (1 row) |
SELECT FOR SHRAE/FOR UPDATE/LOCK IN SHRAE MODE |
SELECT |
|
SELECT语法支持范围 |
SELECT |
|