MySQL关键字-字段名使用Usage报错问题

1. 背景描述

前几天遇到这么一个问题,用navicat创建个数据表,其中有一个字段标识用量,用量嘛依照我的六级未遂的英语,Usage。嗯,这个单词贴切,够短,perfect!表真的创建成功了,但是插入数据时就是不对,语法错误!what a fuck!检查了半天终于发现Usage这个罪魁祸首,这货别是个关键字吧,查了一下,嘿,还真是,fuck again!

2. 官方文档说明

查了一下官方文档是这么说的:

Keywords are words that have significance in SQL. Certain keywords, such as SELECT, DELETE, or BIGINT, are reserved and require special treatment for use as identifiers such as table and column names. This may also be true for the names of built-in functions.

关键字是在SQL中有意义的单词。某些关键字(如SELECT、DELETE或BIGINT)是保留的,需要特殊处理才能用作表和列名等标识符。对于内置函数的名称也可能是这样。
Nonreserved keywords are permitted as identifiers without quoting.
不带引号的关键字可以作为标识符。

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax ... near 'interval (begin INT, end INT)'

BEGIN and END are keywords but not reserved, so their use as identifiers does not require quoting. INTERVAL is a reserved keyword and must be quoted to be used as an identifier
BEGIN和END是关键字,但不是保留的,因此它们用作标识符不需要引用。INTERVAL是保留关键字,必须引用才能用作标识符

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

Exception: A word that follows a period in a qualified name must be an identifier, so it need not be quoted even if it is reserved
例外:限定名中句点后面的单词必须是标识符,因此即使保留了它,也不必引用

Names of built-in functions are permitted as identifiers but may require care to be used as such. For example, COUNT is acceptable as a column name. However, by default, no whitespace is permitted in function invocations between the function name and the following ( character. This requirement enables the parser to distinguish whether the name is used in a function call or in nonfunction context.
内置函数的名称允许作为标识符,但可能需要谨慎使用。例如,COUNT可以作为列名。但是,默认情况下,函数调用中函数名和以下字符之间不允许有空格。这个需求使解析器能够区分名称是在函数调用中使用还是在非函数上下文中使用。

3. MySQL5.7关键字保留字列表

下面罗列了MySQL5.7版本的关键字和保留字,做个笔记吧,毕竟年龄大了,记性不好,顺便说一句,带 ®标识的为关键字
A

ACCESSIBLE ®ACCOUNT; added in 5.7.6 (nonreserved)ACTIONADD ®AFTER
AGAINSTAGGREGATEALGORITHMALL ®ALTER ®
ALWAYS; added in 5.7.6 (nonreserved)ANALYSEANALYZE ®AND ®ANY
AS ®ASC ®ASCIIASENSITIVE ®AT
AUTOEXTEND_SIZEAUTO_INCREMENTAVGAVG_ROW_LENGTH

B

ACKUPBEFORE ®BEGINBETWEEN ®BIGINT ®
INARY ®BINLOGBITBLOB ®BLOCK
BOOLBOOLEANBOTH ®BTREEBY ®
BYTE

C

CACHECALL ®CASCADE ®CASCADEDCASE ®
CATALOG_NAMECHAINCHANGE ®CHANGEDCHANNEL; added in 5.7.6 (nonreserved)
CHAR ®CHARACTER ®CHARSETCHECK ®CHECKSUM
CIPHERCLASS_ORIGINCLIENTCLOSECOALESCE
CODECOLLATE ®COLLATIONCOLUMN ®COLUMNS
COLUMN_FORMATCOLUMN_NAMECOMMENTCOMMITCOMMITTED
COMPACTCOMPLETIONCOMPRESSEDCOMPRESSION; added in 5.7.8 (nonreserved)CONCURRENT
CONDITION ®CONNECTIONCONSISTENTCONSTRAINT ®CONSTRAINT_CATALOG
CONSTRAINT_NAMECONSTRAINT_SCHEMACONTAINSCONTEXTCONTINUE ®
CONVERT ®CPUCREATE ®CROSS ®CUBE
CURRENTCURRENT_DATE ®CURRENT_TIME ®CURRENT_TIMESTAMP ®CURRENT_USER ®
CURSOR ®CURSOR_NAME

D

DATADATABASE ®DATABASES ®DATAFILEDATE
DATETIMEDAYDAY_HOUR ®DAY_MICROSECOND ®DAY_MINUTE ®
DAY_SECOND ®DEALLOCATEDEC ®DECIMAL ®DECLARE ®
DEFAULT ®DEFAULT_AUTHDEFINERDELAYED ®DELAY_KEY_WRITE
DELETE ®DESC ®DESCRIBE ®DES_KEY_FILEDETERMINISTIC ®
DIAGNOSTICSDIRECTORYDISABLEDISCARDDISK
DISTINCT ®DISTINCTROW ®DIV ®DODOUBLE ®
DROP ®DUAL ®DUMPFILEDUPLICATEDYNAMIC

E

EACH ®ELSE ®ELSEIF ®ENABLEENCLOSED ®
ENCRYPTION; added in 5.7.11 (nonreserved)ENDENDSENGINEENGINES
ENUMERRORERRORSESCAPEESCAPED ®
EVENTEVENTSEVERYEXCHANGEEXECUTE
EXISTS ®EXIT ®EXPANSIONEXPIREEXPLAIN ®
EXPORTEXTENDEDEXTENT_SIZE

F

FALSE ®FASTFAULTSFETCH ®FIELDS
FILEFILE_BLOCK_SIZE; added in 5.7.6 (nonreserved)FILTER; added in 5.7.3 (nonreserved)FIRSTFIXED
FLOAT ®FLOAT4 ®FLOAT8 ®FLUSHFOLLOWS; added in 5.7.2 (nonreserved)
FOR ®FORCE ®FOREIGN ®FORMATFOUND
FROM ®FULLFULLTEXT ®FUNCTION

G

GENERALGENERATED ®; added in 5.7.6 (reserved)GEOMETRYGEOMETRYCOLLECTIONGET ®
GET_FORMATGLOBALGRANT ®GRANTSGROUP ®
GROUP_REPLICATION; added in 5.7.6 (nonreserved)

H

HANDLERHASHHAVING ®HELPHIGH_PRIORITY ®
HOSTHOSTSHOURHOUR_MICROSECOND ®HOUR_MINUTE ®
HOUR_SECOND ®

I

IDENTIFIEDIF ®IGNORE ®IGNORE_SERVER_IDSIMPORT
IN ®INDEX ®INDEXESINFILE ®INITIAL_SIZE
INNER ®INOUT ®INSENSITIVE ®INSERT ®INSERT_METHOD
INSTALLINSTANCE; added in 5.7.11 (nonreserved)INT ®INT1 ®INT2 ®
INT3 ®INT4 ®INT8 ®INTEGER ®INTERVAL ®
INTO ®INVOKERIOIO_AFTER_GTIDS ®IO_BEFORE_GTIDS ®
IO_THREADIPCIS ®ISOLATIONISSUER

J

JOIN ®JSON; added in 5.7.8 (nonreserved)

K

KEY ®KEYS ®KEY_BLOCK_SIZEKILL ®

L

LANGUAGELASTLEADING ®LEAVE ®LEAVES
LEFT ®LESSLEVELLIKE ®LIMIT ®
INEAR ®LINES ®LINESTRINGLISTLOAD ®
LOCALLOCALTIME ®LOCALTIMESTAMP ®LOCK ®LOCKS
LOGFILELOGSLONG ®LONGBLOB ®LONGTEXT ®
LOOP ®LOW_PRIORITY ®

M

MASTERMASTER_AUTO_POSITIONMASTER_BIND ®MASTER_CONNECT_RETRYMASTER_DELAY
MASTER_HEARTBEAT_PERIODMASTER_HOSTMASTER_LOG_FILEMASTER_LOG_POSMASTER_PASSWORD
MASTER_PORTMASTER_RETRY_COUNTMASTER_SERVER_IDMASTER_SSLMASTER_SSL_CA
MASTER_SSL_CAPATHMASTER_SSL_CERTMASTER_SSL_CIPHERMASTER_SSL_CRLMASTER_SSL_CRLPATH
MASTER_SSL_KEYMASTER_SSL_VERIFY_SERVER_CERT ®MASTER_TLS_VERSION; added in 5.7.10 (nonreserved)MASTER_USERMATCH ®
MAXVALUE ®MAX_CONNECTIONS_PER_HOURMAX_QUERIES_PER_HOURMAX_ROWSMAX_SIZE
MAX_STATEMENT_TIME; added in 5.7.4 (nonreserved); removed in 5.7.8MAX_UPDATES_PER_HOURMAX_USER_CONNECTIONSMEDIUMMEDIUMBLOB ®
MEDIUMINT ®MEDIUMTEXT ®MEMORYMERGEMESSAGE_TEXT
MICROSECONDMIDDLEINT ®MIGRATEMINUTEMINUTE_MICROSECOND ®
MINUTE_SECOND ®MIN_ROWSMOD ®MODEMODIFIES ®
MODIFYMONTHMULTILINESTRINGMULTIPOINTMULTIPOLYGON
MUTEXMYSQL_ERRNO

N

NAMENAMESNATIONALNATURAL ®NCHAR
NDBNDBCLUSTERNEVER; added in 5.7.4 (nonreserved)NEWNEXT
NONODEGROUPNONBLOCKING; removed in 5.7.6NONENOT ®
NO_WAITNO_WRITE_TO_BINLOG ®NULL ®NUMBERNUMERIC ®
NVARCHAR

O

OFFSETOLD_PASSWORD; removed in 5.7.5ON ®ONEONLY
OPENOPTIMIZE ®OPTIMIZER_COSTS ®; added in 5.7.5 (reserved)OPTION ®OPTIONALLY ®
OPTIONSOR ®ORDER ®OUT ®OUTER ®
OUTFILE ®OWNER

P

PACK_KEYSPAGEPARSERPARSE_GCOL_EXPR; added in 5.7.6 (reserved); became nonreserved in 5.7.8PARTIAL
PARTITION ®PARTITIONINGPARTITIONSPASSWORDPHASE
PLUGINPLUGINSPLUGIN_DIRPOINTPOLYGON
PORTPRECEDES; added in 5.7.2 (nonreserved)PRECISION ®PREPAREPRESERVE
PREVPRIMARY ®PRIVILEGESPROCEDURE ®PROCESSLIST
PROFILEPROFILESPROXYPURGE ®

Q

QUARTERQUERYQUICK

R

RANGE ®READ ®READS ®READ_ONLYREAD_WRITE ®
REAL ®REBUILDRECOVERREDOFILEREDO_BUFFER_SIZE
REDUNDANTREFERENCES ®REGEXP ®RELAYRELAYLOG
RELAY_LOG_FILEELAY_LOG_POSRELAY_THREADRELEASE ®
RELOADREMOVERENAME ®REORGANIZEREPAIR
REPEAT ®REPEATABLEREPLACE ®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)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)
REPLICATIONREQUIRE ®RESETRESIGNAL ®RESTORE
RESTRICT ®RESUMERETURN ®RETURNED_SQLSTATERETURNS
REVERSEREVOKE ®RIGHT ®RLIKE ®ROLLBACK
ROLLUPROTATE; added in 5.7.11 (nonreserved)ROUTINEROWROWS
ROW_COUNTROW_FORMATRTREE

S

SAVEPOINTSCHEDULESCHEMA ®SCHEMAS ®SCHEMA_NAME
SECONDSECOND_MICROSECOND ®SECURITYSELECT ®SENSITIVE ®
SEPARATOR ®SERIALSERIALIZABLESERVERSESSION
SET ®SHARESHOW ®SHUTDOWNSIGNAL ®
SIGNEDSIMPLESLAVESLOWSMALLINT ®
SNAPSHOTSOCKETSOMESONAMESOUNDS
SOURCESPATIAL ®SPECIFIC ®SQL ®SQLEXCEPTION ®
SQLSTATE ®SQLWARNING ®SQL_AFTER_GTIDSSQL_AFTER_MTS_GAPSSQL_BEFORE_GTIDS
SQL_BIG_RESULT ®SQL_BUFFER_RESULTSQL_CACHESQL_CALC_FOUND_ROWS ®SQL_NO_CACHE
SQL_SMALL_RESULT ®SQL_THREADSQL_TSI_DAYSQL_TSI_HOURSQL_TSI_MINUTE
SQL_TSI_MONTHSQL_TSI_QUARTERSQL_TSI_SECONDSQL_TSI_WEEKSQL_TSI_YEAR
SSL ®STACKEDSTARTSTARTING ®STARTS
STATS_AUTO_RECALCSTATS_PERSISTENTSTATS_SAMPLE_PAGESSTATUSSTOP
STORAGESTORED ®; added in 5.7.6 (reserved)STRAIGHT_JOIN ®STRINGSUBCLASS_ORIGIN
SUBJECTSUBPARTITIONSUBPARTITIONSSUPERSUSPEND
SWAPSSWITCHES

T

TABLE ®TABLESTABLESPACETABLE_CHECKSUMTABLE_NAME
TEMPORARYTEMPTABLETERMINATED ®TEXTTHAN
THEN ®TIMETIMESTAMPTIMESTAMPADDTIMESTAMPDIFF
TINYBLOB ®TINYINT ®TINYTEXT ®TO ®TRAILING ®
TRANSACTIONTRIGGER ®TRIGGERSTRUE ®TRUNCATE
TYPETYPES

U

UNCOMMITTEDUNDEFINEDUNDO ®UNDOFILEUNDO_BUFFER_SIZE
UNICODEUNINSTALLUNION ®UNIQUE ®UNKNOWN
UNLOCK ®UNSIGNED ®UNTILUPDATE ®UPGRADE
USAGE ®USE ®USERUSER_RESOURCESUSE_FRM
USING ®UTC_DATE ®UTC_TIME ®UTC_TIMESTAMP ®

V

VALIDATION; added in 5.7.5 (nonreserved)VALUEVALUES ®VARBINARY ®VARCHAR ®
VARCHARACTER ®VARIABLESVARYING ®VIEWVIRTUAL ®; added in 5.7.6 (reserved)

W

WAITWARNINGSWEEKWEIGHT_STRINGWHEN ®
WHERE ®WHILE ®WITH ®WITHOUT; added in 5.7.5 (nonreserved)WORK
WRAPPERWRITE ®

X

X509XAXID; added in 5.7.5 (nonreserved)XMLXOR ®

Y

YEARYEAR_MONTH ®

Z

ZEROFILL ®

4. 总结

MySQL关键字很多,大部分关键字可以直接用作表名或者字段名,但是保留字必须用引号包含才可以使用。但是还是能不用尽量不用吧,毕竟麻烦,打断sql多一个少一个引号根本注意不到好吗?!!你可以做但没必要~

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值