ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

万里GreatSQL保留字、关键字

2024-01-13 21:38:08  阅读:51  来源: 互联网

标签:


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

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

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

如下面的例子:

greatsql> CREATE TABLE interval (begin INT, end INT);
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 只是关键字,不需要特殊处理,修改如下:

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

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

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

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

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

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

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

greatsql> SELECT * FROM information_schema.KEYWORDS WHERE WORD LIKE '%int%';
+----------------------------------------+----------+
| WORD                                   | RESERVED |
+----------------------------------------+----------+
| ACCESSIBLE                             |        1 |
| ACCOUNT                                |        0 |
| ACTION                                 |        0 |
| ACTIVE                                 |        0 |
| ADD                                    |        1 |
| ADMIN                                  |        0 |
...
| XML                                    |        0 |
| XOR                                    |        1 |
| YEAR                                   |        0 |
| YEAR_MONTH                             |        1 |
| ZEROFILL                               |        1 |
| ZONE                                   |        0 |
+----------------------------------------+----------+
766 rows in set (0.00 sec)

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

+----------------------------------------+----------+
| WORD                                   | RESERVED |
+----------------------------------------+----------+
| CLIENT_STATISTICS                      |        0 |
| CLOB                                   |        1 |
| CLUSTERING                             |        1 |
| COMPRESSION_DICTIONARY                 |        0 |
| EFFECTIVE                              |        0 |
| INDEX_STATISTICS                       |        0 |
| PLAN                                   |        1 |
| ROWNUM                                 |        1 |
| SEQUENCE_TABLE                         |        1 |
| SYSDATE                                |        0 |
| SYSTIMESTAMP                           |        0 |
| TABLE_STATISTICS                       |        0 |
| THREAD_STATISTICS                      |        0 |
| USER_STATISTICS                        |        0 |
| VARCHAR2                               |        1 |
+----------------------------------------+----------+

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

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[[email protected]]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有