前言
MySQL和Oracle的关键字还是不尽相同的,在Oracle数据库中,我们的数据表中定义了大量的code字段用来表示主键,但是在MySQL中code是关键字,使用以前的处理方法就有些“水土不服”。
下面我们来了解一下MySQL中的关键字和保留字。
什么是关键字和保留字
关键字是指在SQL中有意义的字。 某些关键字(例如SELECT,DELETE或BIGINT)是保留的,需要特殊处理才能用作表和列名称等标识符。 这一点对于内置函数的名称也适用。
如何使用关键字和保留字
非保留关键字允许作为标识符,不需要加引号。 如果您要适用保留字作为标识符,就必须适用引号。
举个例子,BEGIN和END是关键字,但不是保留字,因此它们用作标识符不需要引号。 INTERVAL是保留关键字,必须加上引号才能用作标识符。
mysql> mysql> use hoegh; Database changed mysql> mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000): mysql> mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.42 sec) mysql> mysql> show create table `interval`; +----------+--------------------------------------------------------- | Table | Create Table +----------+--------------------------------------------------------- | interval | CREATE TABLE `interval` ( `begin` int(11) DEFAULT NULL, `end` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +----------+--------------------------------------------------------- 1 row in set (0.00 sec) mysql>
我们看到,第一条语句中表名使用了保留字interval,执行失败;
第二条语句对interval加了引号,执行成功。
在这里需要注意的是,引号必须是反引号,而非单引号。否则会报错,如下所示:
mysql> mysql> drop table `interval`;--使用反引号 Query OK, 0 rows affected (0.11 sec) mysql> mysql> create table 'interval' (begin INT, end INT);--使用单引号,报错 ERROR 1064 (42000): mysql>
有一个例外
如果标识符在限定名称(数据库名)的句点之后,即使是保留关键字也不需要引号。
我们以hoegh数据库为例,如果表名写为hoegh.interval就不需要对保留字interval加引号了。
mysql> mysql> create table hoegh.interval (begin INT, end INT); Query OK, 0 rows affected (0.19 sec) mysql> mysql> show create table hoegh.interval; +----------+--------------------------------------------------------- | Table | Create Table +----------+--------------------------------------------------------- | interval | CREATE TABLE `interval` ( `begin` int(11) DEFAULT NULL, `end` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +----------+--------------------------------------------------------- 1 row in set (0.00 sec) mysql>
关于使用内置函数名称
允许内置函数的名称可以作为标识符,但最好谨慎使用。例如,COUNT作为列名称是合法的。但是,默认情况下,在函数名和后面的(之间的函数调用中不允许有空格。这个限制使解析器能够区分名称是用于函数调用还是用在非函数上下文中。
附录
在某些时候,您可能需要升级到更高版本,因此最好查看一下未来的保留字。您可以在涵盖更高版本的MySQL的手册中找到这些。对于表中的大多数保留字,在标准SQL中禁止作为列或表的名称(例如,GROUP)。其中一些保留字,是由于MySQL需要它们并使用一个yacc解析器。
以下列出三张表格:
第一个表格10.2显示MySQL 5.7中的关键字和保留字。保留的关键字标记为(R)。此外,_FILENAME是保留的。
第二个表格10.3显示MySQL 5.7相比5.6版本新增的保留字。
第三个表格10.4显示MySQL 5.7相比5.6版本删除的保留字。
Table 10.2 Keywords and Reserved Words in MySQL 5.7
ACCESSIBLE (R) | ACCOUNT[a] | ACTION | |||||||||||||||||||||||||||||||||||||||||||||||
ADD (R) | AFTER | AGAINST | |||||||||||||||||||||||||||||||||||||||||||||||
AGGREGATE | ALGORITHM | ALL (R) | |||||||||||||||||||||||||||||||||||||||||||||||
ALTER (R) | ALWAYS[b] | ANALYSE | |||||||||||||||||||||||||||||||||||||||||||||||
ANALYZE (R) | AND (R) | ANY | |||||||||||||||||||||||||||||||||||||||||||||||
AS (R) | ASC (R) | ASCII | <
您可能想查找下面的文章: |