mysql保留关键字列表

mysql在设置字段的时候,有些字符是不能被设置成字段名的,而这些字符又有很多,而且往往都是我们大家平时所不注意的,而就因为这个不注意给我们造成了不少困扰,下面我就讲一下今天我的遭遇,也顺便把关键字列表一起列出来.

今天在公司里做一个通过淘宝的开放接口抓取淘宝里面商品信息的东西,因为淘宝的接口的请求数量有限,而且我还要对商品进行二次的加工处理修改等,所以需要将商品先存入数据库备用.在建表的时候为了图方便就建立了跟淘宝数据返回名称一样的字段名.淘宝有个商品详情的字段是desc,英文全称应该是describe,描述的意思.我也为了图个简单就用desc来做为字段名,结果死活都插入不进去数据,因为用的一个框架也不熟悉,是刚刚接手的,就以为是框架调用出错了,然后就去看框架的源代码,进行断点调试,经过这样来来回回折腾了大约都两个多小时,我突然发现如果不插入desc这个信息,就完全没有问题.

到这里终于找到问题的突破点了,再重新审视了一下这个字段,发现跟排序的关键字desc一样,于是就突然想到”保留字”这三个字,到网上一查,果真这四个字母是保留字,于是把字段名称一改,程序很舒畅地运行起来.折腾了半天都是这个保留关键字给搞的.不过也暴露出自己对于问题查找太盲目,没有仔细考虑清楚,也对于mysql的关键字印象不深刻,造成了白白浪费了那么长的时间.有了这次教训,也做个日志记录一下这次教训,希望以后遇到同样的问题能够理清头绪,尽快地找出正确的解决方案,不要盲目地以为是自己程序的问题.

这里也把自己在网上找到mysql的保留关键字发给大家,很多常用的字都是mysql的保留关键字,比如key,group,read,show,table等等.大家下次建表的时候一定要尽量避开这些关键字,遇到不能插入到表里面的时候也尽量先考虑下看看是不是自己的某个字段建立的名称跟保留关键字有冲突.

MySQL 5.5 保留关键字

ACCESSIBLE ADD ALL
ALTER ANALYZE AND
AS ASC ASENSITIVE
BEFORE BETWEEN BIGINT
BINARY BLOB BOTH
BY CALL CASCADE
CASE CHANGE CHAR
CHARACTER CHECK COLLATE
COLUMN CONDITION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GRANT GROUP HAVING
HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
HOUR_SECOND IF IGNORE
IN INDEX INFILE
INNER INOUT INSENSITIVE
INSERT INT INT1
INT2 INT3 INT4
INT8 INTEGER INTERVAL
INTO IS ITERATE
JOIN KEY KEYS
KILL LEADING LEAVE
LEFT LIKE LIMIT
LINEAR LINES LOAD
LOCALTIME LOCALTIMESTAMP LOCK
LONG LONGBLOB LONGTEXT
LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
MATCH MAXVALUE MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RANGE READ
READS READ_WRITE REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESIGNAL RESTRICT
RETURN REVOKE RIGHT
RLIKE SCHEMA SCHEMAS
SECOND_MICROSECOND SELECT SENSITIVE
SEPARATOR SET SHOW
SIGNAL SMALLINT SPATIAL
SPECIFIC SQL SQLEXCEPTION
SQLSTATE SQLWARNING SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SSL
STARTING STRAIGHT_JOIN TABLE
TERMINATED THEN TINYBLOB
TINYINT TINYTEXT TO
TRAILING TRIGGER TRUE
UNDO UNION UNIQUE
UNLOCK UNSIGNED UPDATE
USAGE USE USING
UTC_DATE UTC_TIME UTC_TIMESTAMP
VALUES VARBINARY VARCHAR
VARCHARACTER VARYING WHEN
WHERE WHILE WITH
WRITE XOR YEAR_MONTH
ZEROFILL

MySQL 5.5新增的保留关键字

GENERAL IGNORE_SERVER_IDS MASTER_HEARTBEAT_PERIOD
MAXVALUE RESIGNAL SIGNAL
SLOW

MySQL 允许一些大家常用到的关键字使用英文 ` 号引起来使用,如:

  • ACTION
  • BIT
  • DATE
  • ENUM
  • NO
  • TEXT
  • TIME
  • TIMESTAMP
4.00 avg. rating (83% score) - 4 votes

发表评论