保留字、关键字


在GreatSQL中,保留字(Reserved Words) 和 关键字(Keywords) 通常有特殊意义,比如SELECT/DELETE/BIGINT 都是保留字。

当使用这些保留字(Reserved Words)作为表名、列名、内置函数名等对象名情况下,需要特殊处理才行(通常建议加上反引号”`“),避免报SQL语法错误。

当使用关键字(Keywords)作为表明、列名、内置函数名等对象名时,无需特殊处理,不会报SQL语法错误。

如下面的例子:

1. greatsql> CREATE TABLE interval (begin INT, end INT);
2. 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 'interval (begin INT, end INT)' at line 1

这是因为 interval 是保留字,需要用 “`“ 引用包括才行,而 begin/end 只是关键字,不需要特殊处理,修改如下:

1. greatsql> CREATE TABLE `interval`(begin INT, end INT);
2. Query OK, 0 rows affected (0.08 sec)

另外,要注意的是,从GreatSQL 8.0.32-24开始,开启SQL兼容模式后,对象名都需要特殊处理才行,例如:

1. greatsql> CREATE TABLE `interval`(`begin` INT, `end` INT);
2. Query OK, 0 rows affected (0.02 sec)

或

1. greatsql> CREATE TABLE "interval"("begin" INT, "end" INT);
2. Query OK, 0 rows affected (0.02 sec)

在上面的两个例子中,用双引号 “ 或 ` 均可。

综上,强烈建议在SQL开发、编写SQL语句时,对象名都用 “ 或 ` 将其引用起来,避免报SQL语法错误,保证应用程序的容错性。

通过查询视图 information_schema.keywords 也可以找到保留字和关键字的信息(其中RESERVED=1的表示是保留字,其余是关键字):

1. greatsql> select * from information_schema.keywords where word like '%int%';
2. +----------------------------------------+----------+
3. | WORD                                   | RESERVED |
4. +----------------------------------------+----------+
5. | ACCESSIBLE                             |        1 |
6. | ACCOUNT                                |        0 |
7. | ACTION                                 |        0 |
8. | ACTIVE                                 |        0 |
9. | ADD                                    |        1 |
10. | ADMIN                                  |        0 |
11. ...
12. | XML                                    |        0 |
13. | XOR                                    |        1 |
14. | YEAR                                   |        0 |
15. | YEAR_MONTH                             |        1 |
16. | ZEROFILL                               |        1 |
17. | ZONE                                   |        0 |
18. +----------------------------------------+----------+
19. 766 rows in set (0.00 sec)

其中,GreatSQL相对MySQL新增的保留字、关键字如下:

1. +----------------------------------------+----------+
2. | WORD                                   | RESERVED |
3. +----------------------------------------+----------+
4. | CLIENT_STATISTICS                      |        0 |
5. | CLOB                                   |        1 |
6. | CLUSTERING                             |        1 |
7. | COMPRESSION_DICTIONARY                 |        0 |
8. | EFFECTIVE                              |        0 |
9. | INDEX_STATISTICS                       |        0 |
10. | PLAN                                   |        1 |
11. | ROWNUM                                 |        1 |
12. | SEQUENCE_TABLE                         |        1 |
13. | SYSDATE                                |        0 |
14. | SYSTIMESTAMP                           |        0 |
15. | TABLE_STATISTICS                       |        0 |
16. | THREAD_STATISTICS                      |        0 |
17. | USER_STATISTICS                        |        0 |
18. | VARCHAR2                               |        1 |
19. +----------------------------------------+----------+

在使用过程中请注意上述保留字、关键字,默认都用 “ 或 ` 将其引用起来,避免报SQL语法错误,保证应用程序的容错性。

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx