当前位置:Gxlcms > mysql > 详解MySQL5.7中的关键字与保留字

详解MySQL5.7中的关键字与保留字

时间:2021-07-01 10:21:17 帮助过:65人阅读

最近在将数据从Oracle迁移到MySQL的过程中,遇到一些问题,其中就包括关键字。下面这篇文章主要给大家介绍了MySQL 5.7中的关键字与保留字的相关资料,文中介绍的非常详细,需要的朋友可以参考学习,下面来一起看看吧。

前言

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)AFTERAGAINST














































AGGREGATEALGORITHMALL (R)














































ALTER (R)ALWAYS[b]ANALYSE














































ANALYZE (R)AND (R)ANY














































AS (R)ASC (R)ASCII














































ASENSITIVE (R)ATAUTOEXTEND_SIZE














































AUTO_INCREMENTAVGAVG_ROW_LENGTH














































BACKUPBEFORE (R)BEGIN














































BETWEEN (R)BIGINT (R)BINARY (R)














































BINLOGBITBLOB (R)














































BLOCKBOOLBOOLEAN














































BOTH (R)BTREEBY (R)














































BYTECACHECALL (R)














































CASCADE (R)CASCADEDCASE (R)














































CATALOG_NAMECHAINCHANGE (R)














































CHANGEDCHANNEL[c]CHAR (R)














































CHARACTER (R)CHARSETCHECK (R)














































CHECKSUMCIPHERCLASS_ORIGIN














































CLIENTCLOSECOALESCE














































CODECOLLATE (R)COLLATION














































COLUMN (R)COLUMNSCOLUMN_FORMAT














































COLUMN_NAMECOMMENTCOMMIT














































COMMITTEDCOMPACTCOMPLETION














































COMPRESSEDCOMPRESSION[d]CONCURRENT














































CONDITION (R)CONNECTIONCONSISTENT














































CONSTRAINT (R)CONSTRAINT_CATALOGCONSTRAINT_NAME














































CONSTRAINT_SCHEMACONTAINSCONTEXT














































CONTINUE (R)CONVERT (R)CPU














































CREATE (R)CROSS (R)CUBE














































CURRENTCURRENT_DATE (R)CURRENT_TIME (R)














































CURRENT_TIMESTAMP (R)CURRENT_USER (R)CURSOR (R)














































CURSOR_NAMEDATADATABASE (R)














































DATABASES (R)DATAFILEDATE














































DATETIMEDAYDAY_HOUR (R)














































DAY_MICROSECOND (R)DAY_MINUTE (R)DAY_SECOND (R)














































DEALLOCATEDEC (R)DECIMAL (R)














































DECLARE (R)DEFAULT (R)DEFAULT_AUTH














































DEFINERDELAYED (R)DELAY_KEY_WRITE














































DELETE (R)DESC (R)DESCRIBE (R)














































DES_KEY_FILEDETERMINISTIC (R)DIAGNOSTICS














































DIRECTORYDISABLEDISCARD














































DISKDISTINCT (R)DISTINCTROW (R)














































p (R)DODOUBLE (R)














































DROP (R)DUAL (R)DUMPFILE














































DUPLICATEDYNAMICEACH (R)














































ELSE (R)ELSEIF (R)ENABLE














































ENCLOSED (R)ENCRYPTION[e]END














































ENDSENGINEENGINES














































ENUMERRORERRORS














































ESCAPEESCAPED (R)EVENT














































EVENTSEVERYEXCHANGE














































EXECUTEEXISTS (R)EXIT (R)














































EXPANSIONEXPIREEXPLAIN (R)














































EXPORTEXTENDEDEXTENT_SIZE














































FALSE (R)FASTFAULTS














































FETCH (R)FIELDSFILE














































FILE_BLOCK_SIZE[f]FILTER[g]FIRST














































FIXEDFLOAT (R)FLOAT4 (R)














































FLOAT8 (R)FLUSHFOLLOWS[h]














































FOR (R)FORCE (R)FOREIGN (R)














































FORMATFOUNDFROM (R)














































FULLFULLTEXT (R)FUNCTION














































GENERALGENERATED[i] (R)GEOMETRY














































GEOMETRYCOLLECTIONGET (R)GET_FORMAT














































GLOBALGRANT (R)GRANTS














































GROUP (R)GROUP_REPLICATION[j]HANDLER














































HASHHAVING (R)HELP














































HIGH_PRIORITY (R)HOSTHOSTS














































HOURHOUR_MICROSECOND (R)HOUR_MINUTE (R)














































HOUR_SECOND (R)IDENTIFIEDIF (R)














































IGNORE (R)IGNORE_SERVER_IDSIMPORT














































IN (R)INDEX (R)INDEXES














































INFILE (R)INITIAL_SIZEINNER (R)














































INOUT (R)INSENSITIVE (R)INSERT (R)














































INSERT_METHODINSTALLINSTANCE[k]














































INT (R)INT1 (R)INT2 (R)














































INT3 (R)INT4 (R)INT8 (R)














































INTEGER (R)INTERVAL (R)INTO (R)














































INVOKERIOIO_AFTER_GTIDS (R)














































IO_BEFORE_GTIDS (R)IO_THREADIPC














































IS (R)ISOLATIONISSUER














































ITERATE (R)JOIN (R)JSON[l]














































KEY (R)KEYS (R)KEY_BLOCK_SIZE














































KILL (R)LANGUAGELAST

人气教程排行