你的位置:首页 > 数据库

[数据库]mysql不能写入数据之关键字冲突


问题描述:今天使用mysql新建了一个表。在插入数据时,报了语法错误。由于使用的是 mabits 代码自动生成工具,并且自己没有改写其中的sql语句。所以确信,sql语句部分应该没有可能写错。因此马上意识到可能表里面的字段出了问题。于是查看表里面的字段,发现有一个desc 字段和mysql中降序的关键字冲突了。然后顺手把这个字段改写成了describe。到这里,以为问题就应该解决了。谁料想,又冲突了。describe也是mysql的关键字。于是上网搜了一下mysql 关键字表。

如下是mysql关键字表

  

MySQL 5.5 保留关键字

ACCESSIBLEADDALL
ALTERANALYZEAND
ASASCASENSITIVE
BEFOREBETWEENBIGINT
BINARYBLOBBOTH
BYCALLCASCADE
CASECHANGECHAR
CHARACTERCHECKCOLLATE
COLUMNCONDITIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GRANTGROUPHAVING
HIGH_PRIORITYHOUR_MICROSECONDHOUR_MINUTE
HOUR_SECONDIFIGNORE
ININDEXINFILE
INNERINOUTINSENSITIVE
INSERTINTINT1
INT2INT3INT4
INT8INTEGERINTERVAL
INTOISITERATE
JOINKEYKEYS
KILLLEADINGLEAVE
LEFTLIKELIMIT
LINEARLINESLOAD
LOCALTIMELOCALTIMESTAMPLOCK
LONGLONGBLOBLONGTEXT
LOOPLOW_PRIORITYMASTER_SSL_VERIFY_SERVER_CERT
MATCHMAXVALUEMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERANGEREAD
READSREAD_WRITEREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESIGNALRESTRICT
RETURNREVOKERIGHT
RLIKESCHEMASCHEMAS
SECOND_MICROSECONDSELECTSENSITIVE
SEPARATORSETSHOW
SIGNALSMALLINTSPATIAL
SPECIFICSQLSQLEXCEPTION
SQLSTATESQLWARNINGSQL_BIG_RESULT
SQL_CALC_FOUND_ROWSSQL_SMALL_RESULTSSL
STARTINGSTRAIGHT_JOINTABLE
TERMINATEDTHENTINYBLOB
TINYINTTINYTEXTTO
TRAILINGTRIGGERTRUE
UNDOUNIONUNIQUE
UNLOCKUNSIGNEDUPDATE
USAGEUSEUSING
UTC_DATEUTC_TIMEUTC_TIMESTAMP
VALUESVARBINARYVARCHAR
VARCHARACTERVARYINGWHEN
WHEREWHILEWITH
WRITEXORYEAR_MONTH
ZEROFILL  

MySQL 5.5新增的保留关键字

GENERALIGNORE_SERVER_IDSMASTER_HEARTBEAT_PERIOD
MAXVALUERESIGNALSIGNAL
SLOW  

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

  • ACTION
  • BIT
  • DATE
  • ENUM
  • NO
  • TEXT
  • TIME
  • TIMESTAMP

上述表中的关键字,在设计数据库时,应当尽量避免这些不必要的冲突。

问题解决:把关键字替换成了非关键字。

经验总结:通过程序操作数据库时,mysql会解析你代码里的sql语句,如果操作的字段中含有关键字,你写的sql语句就可能被错误解释了,sql语句也就出错了。数据库种类还是比较多的。多多少少都有点关键字,每个版本还略有不同。在设计数据库表的时候,应当设计的字段名特殊一点,尽量长一点,避免和关键字冲突。