前⾔
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 总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
因篇幅问题不能全部显示,请点此查看更多更全内容