MySQL SQL Error: 1064, SQLState: 42000 错误

本文详细介绍了MySQL中的关键字和保留字,列举了可能导致命名冲突的词汇,并提供了三种有效解决方法,帮助开发者避免在创建数据库对象时遇到的命名错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 MySQL 中,下表中的字显式被保留。其中大多数字进制被标准 SQL 用作列名 和/或 表名( 例如,GROUP) 。少数被保留了,因为 MySQL 需要它们,( 目前) 使用 yacc 解析程序。保留字被引起来后可以用作识别符。

你不小心使用了下面的关键字,那么就会报这个错误:

SQL Error: 1064, SQLState: 42000

MySQL 关键字和保留字

下面这个表格的目前 MySQL 所拥有的关键字和保留字,在使用 MySQL 创建库名、表名、字段名等的时候,最好避免直接使用这些单词,并且不分大小写,否则的话很容易报错。

123
ADDALLALTER
ANALYZEANDAS
ASCASENSITIVEBEFORE
BETWEENBIGINTBINARY
BLOBBOTHBY
CALLCASCADECASE
CHANGECHARCHARACTER
CHECKCOLLATECOLUMN
CONDITIONCONNECTIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GOTOGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIS
ITERATEJOINKEY
KEYSKILLLABEL
LEADINGLEAVELEFT
LIKELIMITLINEAR
LINESLOADLOCALTIME
LOCALTIMESTAMPLOCKLONG
LONGBLOBLONGTEXTLOOP
LOW_PRIORITYMATCHMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERAID0RANGE
READREADSREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSMALLINT
SPATIALSPECIFICSQL
SQLEXCEPTIONSQLSTATESQLWARNING
SQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULT
SSLSTARTINGSTRAIGHT_JOIN
TABLETERMINATEDTHEN
TINYBLOBTINYINTTINYTEXT
TOTRAILINGTRIGGER
TRUEUNDOUNION
UNIQUEUNLOCKUNSIGNED
UPDATEUSAGEUSE
USINGUTC_DATEUTC_TIME
UTC_TIMESTAMPVALUESVARBINARY
VARCHARVARCHARACTERVARYING
WHENWHEREWHILE
WITHWRITEX509
XORYEAR_MONTHZEROFILL

解决方法

有时候由于特殊原因,又必须使用这些关键字当作名称怎么办?办法还是有的,这里推荐三种方式来解决这个问题。

一、将表名或字段名用方括号([])括起来

xml 配置:

<property name="desc" type="string">
    <column name="[DESC]" length="255" not-null="true"/>
</property>

注解:

@Column(name = "[DESC]", nullable = false)
public String getDesc() {
    return this.desc;
}

二、将表名或字段名用两个重音符号(`)括起来

重音符号键即是键盘上 “1” 键左边的、“Tab” 键上边的那个键。此符号亦被称为“反向引号”。

xml 配置:

<property name="desc" type="string">
    <column name="`DESC`" length="255" not-null="true"/>
</property>

注解:

@Column(name = "`DESC`", nullable = false)
public String getDesc() {
    return this.desc;
}

三、将表名或字段名用双引号(")括起来

xml 配置:

<property name="desc" type="string">
    <column name='"DESC"' length="255" not-null="true"/>
</property>

注解:

@Column(name = "\"DESC\"", nullable = false)
public String getDesc() {
    return this.desc;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值