搜索
您的当前位置:首页正文

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

来源:意榕旅游网
MySQL5.7中的关键字与保留字详解

前⾔

MySQL和Oracle的关键字还是不尽相同的,在Oracle数据库中,我们的数据表中定义了⼤量的code字段⽤来表⽰主键,但是在MySQL中code是关键字,使⽤以前的处理⽅法就有些“⽔⼟不服”。下⾯我们来了解⼀下MySQL中的关键字和保留字。什么是关键字和保留字

关键字是指在SQL中有意义的字。 某些关键字(例如SELECT,DELETE或BIGINT)是保留的,需要特殊处理才能⽤作表和列名称等标识符。 这⼀点对于内置函数的名称也适⽤。如何使⽤关键字和保留字

⾮保留关键字允许作为标识符,不需要加引号。 如果您要适⽤保留字作为标识符,就必须适⽤引号。

举个例⼦,BEGIN和END是关键字,但不是保留字,因此它们⽤作标识符不需要引号。 INTERVAL是保留关键字,必须加上引号才能⽤作标识符。

mysql>

mysql> use hoegh;Database changedmysql>

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.7ACCESSIBLE (R)ADD (R)AGGREGATEALTER (R)ANALYZE (R)AS (R)

ASENSITIVE (R)AUTO_INCREMENTBACKUPBETWEEN (R)BINLOGBLOCKBOTH (R)BYTECASCADE (R)CATALOG_NAMECHANGEDCHARACTER (R)CHECKSUMCLIENTCODECOLUMN (R)COLUMN_NAMECOMMITTEDCOMPRESSEDCONDITION (R)CONSTRAINT (R)CONSTRAINT_SCHEMACONTINUE (R)

ACCOUNT[a]AFTERALGORITHMALWAYS[b]AND (R)ASC (R)ATAVGBEFORE (R)BIGINT (R)BITBOOLBTREECACHECASCADEDCHAINCHANNEL[c]CHARSETCIPHERCLOSECOLLATE (R)COLUMNSCOMMENTCOMPACTCOMPRESSION[d]CONNECTION

CONSTRAINT_CATALOGCONTAINSCONVERT (R)

ACTIONAGAINSTALL (R)ANALYSEANYASCII

AUTOEXTEND_SIZEAVG_ROW_LENGTHBEGINBINARY (R)BLOB (R)BOOLEANBY (R)CALL (R)CASE (R)CHANGE (R)CHAR (R)CHECK (R)CLASS_ORIGINCOALESCECOLLATIONCOLUMN_FORMATCOMMITCOMPLETIONCONCURRENTCONSISTENTCONSTRAINT_NAMECONTEXTCPU

CREATE (R)CURRENT

CURRENT_TIMESTAMP (R)CURSOR_NAMEDATABASES (R)DATETIME

DAY_MICROSECOND (R)DEALLOCATEDECLARE (R)DEFINERDELETE (R)DES_KEY_FILEDIRECTORYDISKDIV (R)DROP (R)DUPLICATEELSE (R)ENCLOSED (R)ENDSENUMESCAPEEVENTSEXECUTEEXPANSIONEXPORTFALSE (R)FETCH (R)

FILE_BLOCK_SIZE[f]FIXEDFLOAT8 (R)FOR (R)FORMATFULLGENERAL

GEOMETRYCOLLECTIONGLOBALGROUP (R)HASH

HIGH_PRIORITY (R)HOUR

HOUR_SECOND (R)IGNORE (R)IN (R)INFILE (R)INOUT (R)INSERT_METHODINT (R)INT3 (R)INTEGER (R)INVOKER

IO_BEFORE_GTIDS (R)IS (R)

CROSS (R)

CURRENT_DATE (R)CURRENT_USER (R)DATADATAFILEDAY

DAY_MINUTE (R)DEC (R)DEFAULT (R)DELAYED (R)DESC (R)

DETERMINISTIC (R)DISABLEDISTINCT (R)DODUAL (R)DYNAMICELSEIF (R)ENCRYPTION[e]ENGINEERRORESCAPED (R)EVERYEXISTS (R)EXPIREEXTENDEDFASTFIELDSFILTER[g]FLOAT (R)FLUSHFORCE (R)FOUNDFULLTEXT (R)GENERATED[i] (R)GET (R)GRANT (R)

GROUP_REPLICATION[j]HAVING (R)HOST

HOUR_MICROSECOND (R)IDENTIFIED

IGNORE_SERVER_IDSINDEX (R)INITIAL_SIZEINSENSITIVE (R)INSTALLINT1 (R)INT4 (R)INTERVAL (R)IO

IO_THREADISOLATION

CUBE

CURRENT_TIME (R)CURSOR (R)DATABASE (R)DATE

DAY_HOUR (R)DAY_SECOND (R)DECIMAL (R)DEFAULT_AUTHDELAY_KEY_WRITEDESCRIBE (R)DIAGNOSTICSDISCARD

DISTINCTROW (R)DOUBLE (R)DUMPFILEEACH (R)ENABLEENDENGINESERRORSEVENTEXCHANGEEXIT (R)EXPLAIN (R)EXTENT_SIZEFAULTSFILEFIRSTFLOAT4 (R)FOLLOWS[h]FOREIGN (R)FROM (R)FUNCTIONGEOMETRYGET_FORMATGRANTSHANDLERHELPHOSTS

HOUR_MINUTE (R)IF (R)IMPORTINDEXESINNER (R)INSERT (R)INSTANCE[k]INT2 (R)INT8 (R)INTO (R)

IO_AFTER_GTIDS (R)IPCISSUER

ITERATE (R)KEY (R)KILL (R)LEADING (R)LEFT (R)LIKE (R)LINES (R)LOAD (R)

LOCALTIMESTAMP (R)LOGFILELONGBLOB (R)LOW_PRIORITY (R)MASTER_BIND (R)

MASTER_HEARTBEAT_PERIODMASTER_LOG_POSMASTER_RETRY_COUNTMASTER_SSL_CAMASTER_SSL_CIPHERMASTER_SSL_KEYMASTER_USERMAX_SIZE

MAX_USER_CONNECTIONSMEDIUMINT (R)MERGEMIDDLEINT (R)

MINUTE_MICROSECOND (R)MOD (R)MODIFYMULTIPOINTMYSQL_ERRNONATIONALNDBNEW

NODEGROUPNOT (R)NULL (R)NVARCHARON (R)OPENOPTION (R)OR (R)OUTER (R)PACK_KEYS

PARSE_GCOL_EXPR[s]PARTITIONINGPHASEPLUGIN_DIRPORTPREPAREPRIMARY (R)PROCESSLISTPROXY

JOIN (R)KEYS (R)LANGUAGELEAVE (R)LESSLIMIT (R)LINESTRINGLOCALLOCK (R)LOGS

LONGTEXT (R)MASTER

MASTER_CONNECT_RETRYMASTER_HOSTMASTER_PASSWORDMASTER_SERVER_IDMASTER_SSL_CAPATHMASTER_SSL_CRLMATCH (R)

MAX_STATEMENT_TIME[n]MEDIUM

MEDIUMTEXT (R)MESSAGE_TEXTMIGRATE

MINUTE_SECOND (R)MODEMONTH

MULTIPOLYGONNAMENATURAL (R)NDBCLUSTERNEXT

NONBLOCKING[p]NO_WAITNUMBEROFFSETONE

OPTIMIZE (R)OPTIONALLY (R)ORDER (R)OUTFILE (R)PAGEPARTIALPARTITIONSPLUGINPOINTPRECEDES[t]PRESERVEPRIVILEGESPROFILEPURGE (R)

JSON[l]KEY_BLOCK_SIZELASTLEAVESLEVELLINEAR (R)LIST

LOCALTIME (R)LOCKSLONG (R)LOOP (R)

MASTER_AUTO_POSITIONMASTER_DELAYMASTER_LOG_FILEMASTER_PORTMASTER_SSLMASTER_SSL_CERTMASTER_SSL_CRLPATHMAXVALUE (R)MAX_ROWS

MAX_UPDATES_PER_HOURMEDIUMBLOB (R)MEMORYMICROSECONDMINUTEMIN_ROWSMODIFIES (R)MULTILINESTRINGMUTEXNAMESNCHARNEVER[o]NONONE

NO_WRITE_TO_BINLOG (R)NUMERIC (R)OLD_PASSWORD[q]ONLY

OPTIMIZER_COSTS[r] (R)OPTIONSOUT (R)OWNERPARSERPARTITION (R)PASSWORDPLUGINSPOLYGONPRECISION (R)PREV

PROCEDURE (R)PROFILESQUARTER

MASTER_SSL_VERIFY_SERVER_CERT(R)MASTER_TLS_VERSION[m]MAX_CONNECTIONS_PER_HOURMAX_QUERIES_PER_HOUR

QUERYREAD (R)READ_WRITE (R)RECOVERREDUNDANTRELAY

RELAY_LOG_POSRELOADREORGANIZEREPEATABLE

REPLICATE_DO_TABLE[v]REPLICATE_REWRITE_DB[y]REPLICATIONRESIGNAL (R)RESUMERETURNSRIGHT (R)ROLLUPROW

ROW_FORMATSCHEDULESCHEMA_NAMESECURITYSEPARATOR (R)SERVERSHARESIGNAL (R)SLAVESNAPSHOTSONAMESPATIAL (R)SQLEXCEPTION (R)SQL_AFTER_GTIDSSQL_BIG_RESULT (R)

SQL_CALC_FOUND_ROWS (R)SQL_THREADSQL_TSI_MINUTESQL_TSI_SECONDSSL (R)STARTING (R)STATS_PERSISTENTSTOP

STRAIGHT_JOIN (R)SUBJECTSUPERSWITCHESTABLESPACETEMPORARYTEXTTIME

TIMESTAMPDIFFTINYTEXT (R)TRANSACTION

QUICK

READS (R)REAL (R)REDOFILEREFERENCES (R)RELAYLOGRELAY_THREADREMOVEREPAIRREPLACE (R)

REPLICATE_IGNORE_DB[w]REPLICATE_WILD_DO_TABLE[z]REQUIRE (R)RESTORERETURN (R)REVERSERLIKE (R)ROTATE[ab]ROWSRTREESCHEMA (R)SECONDSELECT (R)SERIALSESSIONSHOW (R)SIGNEDSLOWSOCKETSOUNDSSPECIFIC (R)SQLSTATE (R)

SQL_AFTER_MTS_GAPSSQL_BUFFER_RESULTSQL_NO_CACHESQL_TSI_DAYSQL_TSI_MONTHSQL_TSI_WEEKSTACKEDSTARTS

STATS_SAMPLE_PAGESSTORAGESTRINGSUBPARTITIONSUSPENDTABLE (R)

TABLE_CHECKSUMTEMPTABLETHANTIMESTAMPTINYBLOB (R)TO (R)TRIGGER (R)

RANGE (R)READ_ONLYREBUILD

REDO_BUFFER_SIZEREGEXP (R)RELAY_LOG_FILERELEASE (R)RENAME (R)REPEAT (R)

REPLICATE_DO_DB[u]REPLICATE_IGNORE_TABLE[x]REPLICATE_WILD_IGNORE_TABLE[aa]RESETRESTRICT (R)

RETURNED_SQLSTATEREVOKE (R)ROLLBACKROUTINEROW_COUNTSAVEPOINTSCHEMAS (R)

SECOND_MICROSECOND (R)SENSITIVE (R)SERIALIZABLESET (R)SHUTDOWNSIMPLESMALLINT (R)SOMESOURCESQL (R)

SQLWARNING (R)SQL_BEFORE_GTIDSSQL_CACHE

SQL_SMALL_RESULT (R)SQL_TSI_HOURSQL_TSI_QUARTERSQL_TSI_YEARSTART

STATS_AUTO_RECALCSTATUSSTORED[ac] (R)SUBCLASS_ORIGINSUBPARTITIONSSWAPSTABLESTABLE_NAMETERMINATED (R)THEN (R)TIMESTAMPADDTINYINT (R)TRAILING (R)TRIGGERS

TRUE (R)TYPESTRUNCATEUNCOMMITTEDUNDO (R)UNDOFILEUNICODEUNINSTALLUNIQUE (R)UNKNOWNUNSIGNED (R)UNTILUPGRADEUSAGE (R)

USERUSER_RESOURCESUSING (R)

UTC_DATE (R)UTC_TIMESTAMP (R)VALIDATION[ad]VALUES (R)

VARBINARY (R)VARCHARACTER (R)VARIABLESVIEWVIRTUAL[ae] (R)WARNINGSWEEKWHEN (R)WHERE (R)WITH (R)WITHOUT[af]WRAPPERWRITE (R)XAXID[ag]XOR (R)YEARZEROFILL (R)

ACCOUNT: added in 5.7.6 (nonreserved)ALWAYS: added in 5.7.6 (nonreserved)CHANNEL: added in 5.7.6 (nonreserved)COMPRESSION: added in 5.7.8 (nonreserved)ENCRYPTION: added in 5.7.11 (nonreserved)FILE_BLOCK_SIZE: added in 5.7.6 (nonreserved)FILTER: added in 5.7.3 (nonreserved)FOLLOWS: added in 5.7.2 (nonreserved)GENERATED: added in 5.7.6 (reserved)

GROUP_REPLICATION: added in 5.7.6 (nonreserved)INSTANCE: added in 5.7.11 (nonreserved)JSON: added in 5.7.8 (nonreserved)

MASTER_TLS_VERSION: added in 5.7.10 (nonreserved)

MAX_STATEMENT_TIME: added in 5.7.4 (nonreserved); removed in 5.7.8NEVER: added in 5.7.4 (nonreserved)NONBLOCKING: removed in 5.7.6OLD_PASSWORD: removed in 5.7.5

OPTIMIZER_COSTS: added in 5.7.5 (reserved)

PARSE_GCOL_EXPR: added in 5.7.6 (reserved); became nonreserved in 5.7.8PRECEDES: added in 5.7.2 (nonreserved)

REPLICATE_DO_DB: added in 5.7.3 (nonreserved)REPLICATE_DO_TABLE: added in 5.7.3 (nonreserved)REPLICATE_IGNORE_DB: added in 5.7.3 (nonreserved)

TYPE

UNDEFINED

UNDO_BUFFER_SIZEUNION (R)UNLOCK (R)UPDATE (R)USE (R)USE_FRMUTC_TIME (R)VALUEVARCHAR (R)VARYING (R)WAIT

WEIGHT_STRINGWHILE (R)WORKX509XML

YEAR_MONTH (R)

[x] REPLICATE_IGNORE_TABLE: added in 5.7.3 (nonreserved)REPLICATE_REWRITE_DB: added in 5.7.3 (nonreserved)REPLICATE_WILD_DO_TABLE: added in 5.7.3 (nonreserved)REPLICATE_WILD_IGNORE_TABLE: added in 5.7.3 (nonreserved)ROTATE: added in 5.7.11 (nonreserved)STORED: added in 5.7.6 (reserved)VALIDATION: added in 5.7.5 (nonreserved)VIRTUAL: added in 5.7.6 (reserved)WITHOUT: added in 5.7.5 (nonreserved)XID: added in 5.7.5 (nonreserved)

Table 10.3 Keywords and Reserved Words Added in MySQL 5.7 Compared to MySQL 5.6ACCOUNTCOMPRESSIONFILTER

GROUP_REPLICATIONMASTER_TLS_VERSIONPARSE_GCOL_EXPRREPLICATE_DO_TABLEROTATEVALIDATIONXID

ALWAYSENCRYPTIONFOLLOWSINSTANCENEVERPRECEDES

REPLICATE_IGNORE_DBSTACKEDVIRTUAL (R)

CHANNELFILE_BLOCK_SIZEGENERATED (R)JSON

OPTIMIZER_COSTS (R)REPLICATE_DO_DB

REPLICATE_IGNORE_TABLESTORED (R)WITHOUT

REPLICATE_REWRITE_DBREPLICATE_WILD_DO_TABLEREPLICATE_WILD_IGNORE_TABLE

Table 10.4 Keywords and Reserved Words Removed in MySQL 5.7 Compared to MySQL 5.6OLD_PASSWORD 总结

以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top