MySQL 5.7中的关键字与保留字详解
前言
MySQL和Oracle的关键字还是不尽相同的,在Oracle数据库中,我们的数据表中定义了大量的code字段用来表示主键,但是在MySQL中code是关键字,使用以前的处理方法就有些“水土不服”。
下面我们来了解一下MySQL中的关键字和保留字。
什么是关键字和保留字
关键字是指在SQL中有意义的字。某些关键字(例如SELECT,DELETE或BIGINT)是保留的,需要特殊处理才能用作表和列名称等标识符。这一点对于内置函数的名称也适用。
如何使用关键字和保留字
非保留关键字允许作为标识符,不需要加引号。如果您要适用保留字作为标识符,就必须适用引号。
举个例子,BEGIN和END是关键字,但不是保留字,因此它们用作标识符不需要引号。INTERVAL是保留关键字,必须加上引号才能用作标识符。
mysql> mysql>usehoegh; Databasechanged mysql> mysql>CREATETABLEinterval(beginINT,endINT); ERROR1064(42000): mysql> mysql>CREATETABLE`interval`(beginINT,endINT); QueryOK,0rowsaffected(0.42sec) mysql> mysql>showcreatetable`interval`; +----------+--------------------------------------------------------- |Table|CreateTable +----------+--------------------------------------------------------- |interval|CREATETABLE`interval`( `begin`int(11)DEFAULTNULL, `end`int(11)DEFAULTNULL )ENGINE=InnoDBDEFAULTCHARSET=latin1| +----------+--------------------------------------------------------- 1rowinset(0.00sec) mysql>
我们看到,第一条语句中表名使用了保留字interval,执行失败;
第二条语句对interval加了引号,执行成功。
在这里需要注意的是,引号必须是反引号,而非单引号。否则会报错,如下所示:
mysql> mysql>droptable`interval`;--使用反引号 QueryOK,0rowsaffected(0.11sec) mysql> mysql>createtable'interval'(beginINT,endINT);--使用单引号,报错 ERROR1064(42000): mysql>
有一个例外
如果标识符在限定名称(数据库名)的句点之后,即使是保留关键字也不需要引号。
我们以hoegh数据库为例,如果表名写为hoegh.interval就不需要对保留字interval加引号了。
mysql> mysql>createtablehoegh.interval(beginINT,endINT); QueryOK,0rowsaffected(0.19sec) mysql> mysql>showcreatetablehoegh.interval; +----------+--------------------------------------------------------- |Table|CreateTable +----------+--------------------------------------------------------- |interval|CREATETABLE`interval`( `begin`int(11)DEFAULTNULL, `end`int(11)DEFAULTNULL )ENGINE=InnoDBDEFAULTCHARSET=latin1| +----------+--------------------------------------------------------- 1rowinset(0.00sec) mysql>
关于使用内置函数名称
允许内置函数的名称可以作为标识符,但最好谨慎使用。例如,COUNT作为列名称是合法的。但是,默认情况下,在函数名和后面的(之间的函数调用中不允许有空格。这个限制使解析器能够区分名称是用于函数调用还是用在非函数上下文中。
附录
在某些时候,您可能需要升级到更高版本,因此最好查看一下未来的保留字。您可以在涵盖更高版本的MySQL的手册中找到这些。对于表中的大多数保留字,在标准SQL中禁止作为列或表的名称(例如,GROUP)。其中一些保留字,是由于MySQL需要它们并使用一个yacc解析器。
以下列出三张表格:
第一个表格10.2显示MySQL5.7中的关键字和保留字。保留的关键字标记为(R)。此外,_FILENAME是保留的。
第二个表格10.3显示MySQL5.7相比5.6版本新增的保留字。
第三个表格10.4显示MySQL5.7相比5.6版本删除的保留字。
Table10.2KeywordsandReservedWordsinMySQL5.7
[a] ACCOUNT:addedin5.7.6(nonreserved) [b] ALWAYS:addedin5.7.6(nonreserved) [c] CHANNEL:addedin5.7.6(nonreserved) [d] COMPRESSION:addedin5.7.8(nonreserved) [e] ENCRYPTION:addedin5.7.11(nonreserved) [f] FILE_BLOCK_SIZE:addedin5.7.6(nonreserved) [g] FILTER:addedin5.7.3(nonreserved) [h] FOLLOWS:addedin5.7.2(nonreserved) [i] GENERATED:addedin5.7.6(reserved) [j] GROUP_REPLICATION:addedin5.7.6(nonreserved) [k] INSTANCE:addedin5.7.11(nonreserved) [l] JSON:addedin5.7.8(nonreserved) [m] MASTER_TLS_VERSION:addedin5.7.10(nonreserved) [n] MAX_STATEMENT_TIME:addedin5.7.4(nonreserved);removedin5.7.8 [o] NEVER:addedin5.7.4(nonreserved) [p] NONBLOCKING:removedin5.7.6 [q] OLD_PASSWORD:removedin5.7.5 [r] OPTIMIZER_COSTS:addedin5.7.5(reserved) [s] PARSE_GCOL_EXPR:addedin5.7.6(reserved);becamenonreservedin5.7.8 [t] PRECEDES:addedin5.7.2(nonreserved) [u] REPLICATE_DO_DB:addedin5.7.3(nonreserved) [v] REPLICATE_DO_TABLE:addedin5.7.3(nonreserved) [w] REPLICATE_IGNORE_DB:addedin5.7.3(nonreserved) [x] REPLICATE_IGNORE_TABLE:addedin5.7.3(nonreserved) [y] REPLICATE_REWRITE_DB:addedin5.7.3(nonreserved) [z] REPLICATE_WILD_DO_TABLE:addedin5.7.3(nonreserved) [aa] REPLICATE_WILD_IGNORE_TABLE:addedin5.7.3(nonreserved) [ab] ROTATE:addedin5.7.11(nonreserved) [ac] STORED:addedin5.7.6(reserved) [ad] VALIDATION:addedin5.7.5(nonreserved) [ae] VIRTUAL:addedin5.7.6(reserved) [af] WITHOUT:addedin5.7.5(nonreserved) [ag] XID:addedin5.7.5(nonreserved)
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
ASENSITIVE (R)
AT
AUTOEXTEND_SIZE
AUTO_INCREMENT
AVG
AVG_ROW_LENGTH
BACKUP
BEFORE (R)
BEGIN
BETWEEN (R)
BIGINT (R)
BINARY (R)
BINLOG
BIT
BLOB (R)
BLOCK
BOOL
BOOLEAN
BOTH (R)
BTREE
BY (R)
BYTE
CACHE
CALL (R)
CASCADE (R)
CASCADED
CASE (R)
CATALOG_NAME
CHAIN
CHANGE (R)
CHANGED
CHANNEL[c]
CHAR (R)
CHARACTER (R)
CHARSET
CHECK (R)
CHECKSUM
CIPHER
CLASS_ORIGIN
CLIENT
CLOSE
COALESCE
CODE
COLLATE (R)
COLLATION
COLUMN (R)
COLUMNS
COLUMN_FORMAT
COLUMN_NAME
COMMENT
COMMIT
COMMITTED
COMPACT
COMPLETION
COMPRESSED
COMPRESSION[d]
CONCURRENT
CONDITION (R)
CONNECTION
CONSISTENT
CONSTRAINT (R)
CONSTRAINT_CATALOG
CONSTRAINT_NAME
CONSTRAINT_SCHEMA
CONTAINS
CONTEXT
CONTINUE (R)
CONVERT (R)
CPU
CREATE (R)
CROSS (R)
CUBE
CURRENT
CURRENT_DATE (R)
CURRENT_TIME (R)
CURRENT_TIMESTAMP (R)
CURRENT_USER (R)
CURSOR (R)
CURSOR_NAME
DATA
DATABASE (R)
DATABASES (R)
DATAFILE
DATE
DATETIME
DAY
DAY_HOUR (R)
DAY_MICROSECOND (R)
DAY_MINUTE (R)
DAY_SECOND (R)
DEALLOCATE
DEC (R)
DECIMAL (R)
DECLARE (R)
DEFAULT (R)
DEFAULT_AUTH
DEFINER
DELAYED (R)
DELAY_KEY_WRITE
DELETE (R)
DESC (R)
DESCRIBE (R)
DES_KEY_FILE
DETERMINISTIC (R)
DIAGNOSTICS
DIRECTORY
DISABLE
DISCARD
DISK
DISTINCT (R)
DISTINCTROW (R)
DIV (R)
DO
DOUBLE (R)
DROP (R)
DUAL (R)
DUMPFILE
DUPLICATE
DYNAMIC
EACH (R)
ELSE (R)
ELSEIF (R)
ENABLE
ENCLOSED (R)
ENCRYPTION[e]
END
ENDS
ENGINE
ENGINES
ENUM
ERROR
ERRORS
ESCAPE
ESCAPED (R)
EVENT
EVENTS
EVERY
EXCHANGE
EXECUTE
EXISTS (R)
EXIT (R)
EXPANSION
EXPIRE
EXPLAIN (R)
EXPORT
EXTENDED
EXTENT_SIZE
FALSE (R)
FAST
FAULTS
FETCH (R)
FIELDS
FILE
FILE_BLOCK_SIZE[f]
FILTER[g]
FIRST
FIXED
FLOAT (R)
FLOAT4 (R)
FLOAT8 (R)
FLUSH
FOLLOWS[h]
FOR (R)
FORCE (R)
FOREIGN (R)
FORMAT
FOUND
FROM (R)
FULL
FULLTEXT (R)
FUNCTION
GENERAL
GENERATED[i] (R)
GEOMETRY
GEOMETRYCOLLECTION
GET (R)
GET_FORMAT
GLOBAL
GRANT (R)
GRANTS
GROUP (R)
GROUP_REPLICATION[j]
HANDLER
HASH
HAVING (R)
HELP
HIGH_PRIORITY (R)
HOST
HOSTS
HOUR
HOUR_MICROSECOND (R)
HOUR_MINUTE (R)
HOUR_SECOND (R)
IDENTIFIED
IF (R)
IGNORE (R)
IGNORE_SERVER_IDS
IMPORT
IN (R)
INDEX (R)
INDEXES
INFILE (R)
INITIAL_SIZE
INNER (R)
INOUT (R)
INSENSITIVE (R)
INSERT (R)
INSERT_METHOD
INSTALL
INSTANCE[k]
INT (R)
INT1 (R)
INT2 (R)
INT3 (R)
INT4 (R)
INT8 (R)
INTEGER (R)
INTERVAL (R)
INTO (R)
INVOKER
IO
IO_AFTER_GTIDS (R)
IO_BEFORE_GTIDS (R)
IO_THREAD
IPC
IS (R)
ISOLATION
ISSUER
ITERATE (R)
JOIN (R)
JSON[l]
KEY (R)
KEYS (R)
KEY_BLOCK_SIZE
KILL (R)
LANGUAGE
LAST
LEADING (R)
LEAVE (R)
LEAVES
LEFT (R)
LESS
LEVEL
LIKE (R)
LIMIT (R)
LINEAR (R)
LINES (R)
LINESTRING
LIST
LOAD (R)
LOCAL
LOCALTIME (R)
LOCALTIMESTAMP (R)
LOCK (R)
LOCKS
LOGFILE
LOGS
LONG (R)
LONGBLOB (R)
LONGTEXT (R)
LOOP (R)
LOW_PRIORITY (R)
MASTER
MASTER_AUTO_POSITION
MASTER_BIND (R)
MASTER_CONNECT_RETRY
MASTER_DELAY
MASTER_HEARTBEAT_PERIOD
MASTER_HOST
MASTER_LOG_FILE
MASTER_LOG_POS
MASTER_PASSWORD
MASTER_PORT
MASTER_RETRY_COUNT
MASTER_SERVER_ID
MASTER_SSL
MASTER_SSL_CA
MASTER_SSL_CAPATH
MASTER_SSL_CERT
MASTER_SSL_CIPHER
MASTER_SSL_CRL
MASTER_SSL_CRLPATH
MASTER_SSL_KEY
MASTER_SSL_VERIFY_SERVER_CERT(R)
MASTER_TLS_VERSION[m]
MASTER_USER
MATCH (R)
MAXVALUE (R)
MAX_CONNECTIONS_PER_HOUR
MAX_QUERIES_PER_HOUR
MAX_ROWS
MAX_SIZE
MAX_STATEMENT_TIME[n]
MAX_UPDATES_PER_HOUR
MAX_USER_CONNECTIONS
MEDIUM
MEDIUMBLOB (R)
MEDIUMINT (R)
MEDIUMTEXT (R)
MEMORY
MERGE
MESSAGE_TEXT
MICROSECOND
MIDDLEINT (R)
MIGRATE
MINUTE
MINUTE_MICROSECOND (R)
MINUTE_SECOND (R)
MIN_ROWS
MOD (R)
MODE
MODIFIES (R)
MODIFY
MONTH
MULTILINESTRING
MULTIPOINT
MULTIPOLYGON
MUTEX
MYSQL_ERRNO
NAME
NAMES
NATIONAL
NATURAL (R)
NCHAR
NDB
NDBCLUSTER
NEVER[o]
NEW
NEXT
NO
NODEGROUP
NONBLOCKING[p]
NONE
NOT (R)
NO_WAIT
NO_WRITE_TO_BINLOG (R)
NULL (R)
NUMBER
NUMERIC (R)
NVARCHAR
OFFSET
OLD_PASSWORD[q]
ON (R)
ONE
ONLY
OPEN
OPTIMIZE (R)
OPTIMIZER_COSTS[r] (R)
OPTION (R)
OPTIONALLY (R)
OPTIONS
OR (R)
ORDER (R)
OUT (R)
OUTER (R)
OUTFILE (R)
OWNER
PACK_KEYS
PAGE
PARSER
PARSE_GCOL_EXPR[s]
PARTIAL
PARTITION (R)
PARTITIONING
PARTITIONS
PASSWORD
PHASE
PLUGIN
PLUGINS
PLUGIN_DIR
POINT
POLYGON
PORT
PRECEDES[t]
PRECISION (R)
PREPARE
PRESERVE
PREV
PRIMARY (R)
PRIVILEGES
PROCEDURE (R)
PROCESSLIST
PROFILE
PROFILES
PROXY
PURGE (R)
QUARTER
QUERY
QUICK
RANGE (R)
READ (R)
READS (R)
READ_ONLY
READ_WRITE (R)
REAL (R)
REBUILD
RECOVER
REDOFILE
REDO_BUFFER_SIZE
REDUNDANT
REFERENCES (R)
REGEXP (R)
RELAY
RELAYLOG
RELAY_LOG_FILE
RELAY_LOG_POS
RELAY_THREAD
RELEASE (R)
RELOAD
REMOVE
RENAME (R)
REORGANIZE
REPAIR
REPEAT (R)
REPEATABLE
REPLACE (R)
REPLICATE_DO_DB[u]
REPLICATE_DO_TABLE[v]
REPLICATE_IGNORE_DB[w]
REPLICATE_IGNORE_TABLE[x]
REPLICATE_REWRITE_DB[y]
REPLICATE_WILD_DO_TABLE[z]
REPLICATE_WILD_IGNORE_TABLE[aa]
REPLICATION
REQUIRE (R)
RESET
RESIGNAL (R)
RESTORE
RESTRICT (R)
RESUME
RETURN (R)
RETURNED_SQLSTATE
RETURNS
REVERSE
REVOKE (R)
RIGHT (R)
RLIKE (R)
ROLLBACK
ROLLUP
ROTATE[ab]
ROUTINE
ROW
ROWS
ROW_COUNT
ROW_FORMAT
RTREE
SAVEPOINT
SCHEDULE
SCHEMA (R)
SCHEMAS (R)
SCHEMA_NAME
SECOND
SECOND_MICROSECOND (R)
SECURITY
SELECT (R)
SENSITIVE (R)
SEPARATOR (R)
SERIAL
SERIALIZABLE
SERVER
SESSION
SET (R)
SHARE
SHOW (R)
SHUTDOWN
SIGNAL (R)
SIGNED
SIMPLE
SLAVE
SLOW
SMALLINT (R)
SNAPSHOT
SOCKET
SOME
SONAME
SOUNDS
SOURCE
SPATIAL (R)
SPECIFIC (R)
SQL (R)
SQLEXCEPTION (R)
SQLSTATE (R)
SQLWARNING (R)
SQL_AFTER_GTIDS
SQL_AFTER_MTS_GAPS
SQL_BEFORE_GTIDS
SQL_BIG_RESULT (R)
SQL_BUFFER_RESULT
SQL_CACHE
SQL_CALC_FOUND_ROWS (R)
SQL_NO_CACHE
SQL_SMALL_RESULT (R)
SQL_THREAD
SQL_TSI_DAY
SQL_TSI_HOUR
SQL_TSI_MINUTE
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_SECOND
SQL_TSI_WEEK
SQL_TSI_YEAR
SSL (R)
STACKED
START
STARTING (R)
STARTS
STATS_AUTO_RECALC
STATS_PERSISTENT
STATS_SAMPLE_PAGES
STATUS
STOP
STORAGE
STORED[ac] (R)
STRAIGHT_JOIN (R)
STRING
SUBCLASS_ORIGIN
SUBJECT
SUBPARTITION
SUBPARTITIONS
SUPER
SUSPEND
SWAPS
SWITCHES
TABLE (R)
TABLES
TABLESPACE
TABLE_CHECKSUM
TABLE_NAME
TEMPORARY
TEMPTABLE
TERMINATED (R)
TEXT
THAN
THEN (R)
TIME
TIMESTAMP
TIMESTAMPADD
TIMESTAMPDIFF
TINYBLOB (R)
TINYINT (R)
TINYTEXT (R)
TO (R)
TRAILING (R)
TRANSACTION
TRIGGER (R)
TRIGGERS
TRUE (R)
TRUNCATE
TYPE
TYPES
UNCOMMITTED
UNDEFINED
UNDO (R)
UNDOFILE
UNDO_BUFFER_SIZE
UNICODE
UNINSTALL
UNION (R)
UNIQUE (R)
UNKNOWN
UNLOCK (R)
UNSIGNED (R)
UNTIL
UPDATE (R)
UPGRADE
USAGE (R)
USE (R)
USER
USER_RESOURCES
USE_FRM
USING (R)
UTC_DATE (R)
UTC_TIME (R)
UTC_TIMESTAMP (R)
VALIDATION[ad]
VALUE
VALUES (R)
VARBINARY (R)
VARCHAR (R)
VARCHARACTER (R)
VARIABLES
VARYING (R)
VIEW
VIRTUAL[ae] (R)
WAIT
WARNINGS
WEEK
WEIGHT_STRING
WHEN (R)
WHERE (R)
WHILE (R)
WITH (R)
WITHOUT[af]
WORK
WRAPPER
WRITE (R)
X509
XA
XID[ag]
XML
XOR (R)
YEAR
YEAR_MONTH (R)
ZEROFILL (R)
Table10.3KeywordsandReservedWordsAddedinMySQL5.7ComparedtoMySQL5.6
ACCOUNT
ALWAYS
CHANNEL
COMPRESSION
ENCRYPTION
FILE_BLOCK_SIZE
FILTER
FOLLOWS
GENERATED (R)
GROUP_REPLICATION
INSTANCE
JSON
MASTER_TLS_VERSION
NEVER
OPTIMIZER_COSTS (R)
PARSE_GCOL_EXPR
PRECEDES
REPLICATE_DO_DB
REPLICATE_DO_TABLE
REPLICATE_IGNORE_DB
REPLICATE_IGNORE_TABLE
REPLICATE_REWRITE_DB
REPLICATE_WILD_DO_TABLE
REPLICATE_WILD_IGNORE_TABLE
ROTATE
STACKED
STORED (R)
VALIDATION
VIRTUAL (R)
WITHOUT
XID
Table10.4KeywordsandReservedWordsRemovedinMySQL5.7ComparedtoMySQL5.6
OLD_PASSWORD
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。