DML
No. |
Description |
Syntax |
Difference |
---|---|---|---|
1 |
DELETE supports deleting data from a specified partition (or subpartition). |
DELETE |
- |
2 |
UPDATE supports ORDER BY and LIMIT. |
UPDATE |
- |
3 |
Support the SELECT INTO syntax. |
SELECT |
|
4 |
Support the REPLACE INTO syntax. |
REPLACE |
Difference between the initial values of the time type. For example:
|
5 |
SELECT supports multi-partition query. |
SELECT |
- |
6 |
UPDATE supports multi-partition update. |
UPDATE |
- |
7 |
Import data by using LOAD DATA. |
LOAD DATA |
When LOAD DATA is used to import data, GaussDB differs from MySQL in the following aspects:
|
8 |
INSERT supports the VALUES reference column syntax. |
INSERT INTO tabname VALUES(1,2,3) ON DUPLICATE KEY UPDATE b = VALUES(column_name) |
The format of table-name.column-name is not supported by VALUES() in the ON DUPLICATE KEY UPDATE clause in GaussDB, but is supported in MySQL. |
9 |
LIMIT differences |
DELETE, SELECT, and UPDATE |
The LIMIT clauses of each statement in GaussDB are different from those in MySQL. The maximum parameter value of LIMIT (of the BIG INT type) in GaussDB is 9223372036854775807. If the actual value exceeds the number, an error is reported. In MySQL, the maximum value of LIMIT (of the unsigned LONGLONG type) is 18446744073709551615. If the actual value exceeds the number, an error is reported. You can set a small value in LIMIT, which is rounded off during execution. The value cannot be a decimal in MySQL. In GaussDB, limit 0 is not allowed in the DELETE statement. In MySQL, limit 0 is allowed in the DELETE statement. |
10 |
Difference in using backslashes (\) |
INSERT |
The usage of backslashes (\) can be determined by parameters in GaussDB and MySQL, but their default usages are different. In MySQL, the NO_BACKSLASH_ESCAPES parameter is used to determine whether backslashes (\) in character strings and identifiers are parsed as common characters or escape characters. By default, backslashes (\) are parsed as escape characters in character strings and identifiers. If set sql_mode is set to 'NO_BACKSLASH_ESCAPES', backslashes (\) cannot be parsed as escape characters in character strings and identifiers. In GaussDB, the standard_conforming_strings parameter is used to determine whether backslashes (\) in character strings and identifiers are parsed as common characters or escape characters. The default value is on, indicating that backslashes (\) are parsed as common text in common character string texts according to the SQL standard. If set standard_conforming_strings is set to off, backslashes (\) can be parsed as escape characters in character strings and identifiers. |
11 |
If the inserted value is less than the number of columns, MySQL reports an error while GaussDB supplements null values. |
INSERT |
In GaussDB, if the column list is not specified and the inserted value is less than the number of columns, values are assigned based on the column sequence when the table is created by default. If a column has a NOT NULL constraint, an error is reported. If no NOT NULL constraint exists and a default value is specified, the default value is added to the column. If no default value is specified, null is added. |
12 |
The columns sorted in ORDER BY must be included in the columns of the result set. |
SELECT |
In GaussDB, when used with the GROUP BY clause, the columns to be sorted in ORDER BY must be included in the columns of the result set retrieved by the SELECT statement. When used with the DISTINCT keyword, the columns to be sorted in ORDER BY must be included in the columns of the result set retrieved by the SELECT statement. |
13 |
Do not use ON DUPLICATE KEY UPDATE to modify constraint columns. |
INSERT |
- |
14 |
Duplicate column names are allowed in the SELECT result. |
SELECT |
- |
15 |
NATURAL JOIN in GaussDB is different from that in MySQL. |
SELECT |
In GaussDB, NATURAL [ [LEFT | RIGHT] OUTER] JOIN allows you not to specify LEFT | RIGHT. If LEFT | RIGHT is not specified, NATURAL OUTER JOIN is NATURAL JOIN. You can use JOIN consecutively. |
16 |
If the foreign key data type is timestamp or datetime, an error is reported for attempts to update or delete the foreign table. |
UPDATE/DELETE |
If the foreign key data type is timestamp or datetime, an error is reported for attempts to update or delete the foreign table, but in MySQL the table can be updated or deleted. |
17 |
Compatibility in terms of nature join and using |
SELECT |
|
18 |
The WITH clause is compatible with MySQL 8.0. |
SELECT, INSERT, UPDATE, and DELETE |
- |
19 |
Compatibility in terms of join |
SELECT |
Commas (,) cannot be used as a way of join in GaussDB, but can be used in MySQL. GaussDB does not support use index for join. |
20 |
If the column expression in the SELECT statement is a function expression or arithmetic expression, the column name in the query result is ?column?. |
SELECT |
In GaussDB, if the column expression in the SELECT statement is a function expression or arithmetic expression, the column name in the query result is ?column?. In MySQL, the name is the corresponding expression. |
21 |
SELECT export file (into outfile) |
SELECT ... INTO OUFILE ... |
In the file exported by using the SELECT INTO OUTFILE syntax, the display precision of values of the FLOAT, DOUBLE, and REAL types in GaussDB is different from that in MySQL. The syntax does not affect the import using COPY the values after import. |
22 |
UPDATE/INSERT/REPLACE ... SET specifies the schema name and table name. |
UPDATE/INSERT/REPLACE ... SET |
The three-segment format for UPDATE/REPLACE SET is database.table.column in MySQL, and is table.column.filed in GaussDB, where filed indicates the attribute in the specified composite type. For INSERT ... SET, MySQL supports column, table.column, and database.table.column. GaussDB supports only column and does not support table.column and database.table.column. |
23 |
The execution sequence of UPDATE SET is different from that of MySQL. |
UPDATE ... SET |
In MySQL, UPDATE SET is performed in sequence. The results of UPDATE at the front affect subsequent results of UPDATE, and the same column can be set for multiple times. In GaussDB, all related data is obtained first, and then UPDATE is performed on the data at a time. The same column cannot be set for multiple times. |
24 |
IGNORE feature |
UPDATE/DELETE/INSERT |
The execution process in MySQL is different from that in GaussDB. Therefore, the number and information of generated warnings may be different. |
25 |
SHOW COLUMNS syntax |
SHOW |
|
26 |
SHOW CREATE DATABASE syntax |
SHOW |
User permission verification is different from that of MySQL.
|
27 |
SHOW CREATE TABLE syntax |
SHOW |
|
28 |
SHOW CREATE VIEW syntax |
SHOW |
|
29 |
SHOW PROCESSLIST syntax |
SHOW |
In GaussDB, the field content and case in the query result of this command are the same as those in the information_schema.processlist view. In MySQL, the field content and case may be different.
|
30 |
SHOW [STORAGE] ENGINES |
SHOW |
In GaussDB, the field content and case of the query result of this command are the same as those in the information_schema.engines view. In MySQL, they may be different from those in the view. The query results of this command are different in MySQL and GaussDB because the databases have different storage engines. |
31 |
SHOW [SESSION] STATUS |
SHOW |
In GaussDB, the field content and case of the query result of this command are the same as those in the information_schema.session_status view. In MySQL, they may be different from those in the view. Currently, GaussDB supports only Threads_connected and Uptime. |
32 |
SHOW [GLOBAL] STATUS |
SHOW |
In GaussDB, the field content and case of the query result of this command are the same as those in the information_schema.global_status view. In MySQL, they may be different from those in the view. Currently, GaussDB supports only Threads_connected and Uptime. |
33 |
SHOW INDEX |
SHOW |
|
34 |
SHOW SESSION VARIABLES |
SHOW |
In GaussDB, the field content and case of the query result are the same as those in the information_schema.session_variables view. In MySQL, they may be different from those in the view. |
35 |
SHOW GLOBAL VARIABLES |
SHOW |
In GaussDB, the field content and case of the query result of this command are the same as those in the information_schema.global_variables view. In MySQL, they may be different from those in the view. |
36 |
SHOW CHARACTER SET |
SHOW |
In GaussDB, the field content and case of the query result are the same as those in the information_schema.character_sets view. In MySQL, they may be different from those in the view. |
37 |
SHOW COLLATION |
SHOW |
In GaussDB, the field content and case of the query result are the same as those in the information_schema.collations view. In MySQL, they may be different from those in the view. |
38 |
EXCEPT Syntax |
SELECT |
- |
39 |
SELECT supports the STRAIGHT_JOIN syntax. |
SELECT |
The execution plans generated in the multi-table JOIN scenarios in GaussDB may be different from those in MySQL. |
40 |
SHOW TABLES |
SHOW |
|
41 |
SHOW TABLE STATUS |
SHOW |
|
42 |
HAVING syntax |
SELECT |
In GaussDB, HAVING can only reference columns in the GROUP BY clause or columns used in aggregate functions. However, MySQL supports more: it allows HAVING to reference SELECT columns in the list and columns in external subqueries. |
43 |
SELECT followed by a row expression |
SELECT |
In MySQL, SELECT cannot be followed by a row expression, but in GaussDB, SELECT can be followed by a row expression. Behavior in MySQL: mysql> SELECT row(1,2); ERROR 1241 (21000): Operand should contain 1 column(s) Behavior in GaussDB: m_db=# SELECT row(1,2); row(1,2) ---------- (1,2) (1 row) |
44 |
SELECT FOR SHRAE/FOR UPDATE/LOCK IN SHRAE MODE |
SELECT |
|
45 |
SELECT syntax |
SELECT |
-- GaussDB m_db=# DROP TABLE IF EXISTS t1; DROP TABLE m_db=# CREATE TABLE t1(a INT, b INT); CREATE TABLE m_db=# INSERT INTO t1 VALUES(1,2); INSERT 0 1 m_db=# SELECT * FROM t1 t2(a, b); a | b ---+--- 1 | 2 (1 row) m_db=# SELECT * FROM (SELECT * FROM t1) t2(a, b); a | b ---+--- 1 | 2 (1 row) -- MySQL5.7 mysql> DROP TABLE IF EXISTS t1; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> CREATE TABLE t1(a INT, b INT); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO t1 VALUES(1,2); Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM t1 t2(a, b); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(a, b)' at line 1 mysql> SELECT * FROM (SELECT * FROM t1) t2(a, b); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(a, b)' at line 1 -- MySQL8.0 mysql> DROP TABLE IF EXISTS t1; Query OK, 0 rows affected (0.10 sec) mysql> CREATE TABLE t1(a INT, b INT); Query OK, 0 rows affected (0.18 sec) mysql> INSERT INTO t1 VALUES(1,2); Query OK, 1 row affected (0.03 sec) mysql> SELECT * FROM t1 t2(a, b); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(a, b)' at line 1 mysql> SELECT * FROM (SELECT * FROM t1) t2(a, b); +------+------+ | a | b | +------+------+ | 1 | 2 | +------+------+ 1 row in set (0.00 sec)
-- GaussDB m_db=# SELECT 1 WHERE true; 1 --- 1 (1 row) -- MySQL5.7 mysql> SELECT 1 WHERE true; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where true' at line 1 -- MySQL8.0 mysql> SELECT 1 WHERE true; +---+ | 1 | +---+ | 1 | +---+ 1 row in set (0.00 sec) |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot