top
Loading...
9.6.MySQL中保留字的處理
9.6. MySQL中保留字的處理

嘗試使用一個識別符,例如使用嵌入式MySQL數據類型或函數名作為表名或列名,例如TIMESTAMPGROUP,會造成一個常見問題。允許你這樣操作(例如,ABS可以作為一個列名)。但是,默認情況下,在數調用中在函數名和后面的‘(’字符之間不允許有空格。該要求使函數調用與列名引用不同。

該行為的不利結果是在某些上下文中省略一個空格會使識別符解釋為函數名。例如,該語句合法:

mysql> CREATE TABLE abs (val INT)

但省略abs后面的空格會造成語法錯誤,因為省略后該語句好像要調用ABS()函數:

mysql> CREATE TABLE abs(val INT);

如果SQL服務器模式包括IGNORE_SPACE模式值,服務器允許函數調用時在函數名和后面的‘(’字符之間有空格。這樣使函數名被視為保留字。結果是,與函數名相同的識別符必須按照9.2節,“數據庫、表、索引、列和別名”中所描述的引起來。SQL服務器模式按照5.3.2節,“SQL服務器模式”中所描述的進行控制。

限定名中句點后面的字必須為一個識別符,因此不需要將它引起來,即使它是一個保留字。

MySQL中,下表中的字顯式被保留。其中大多數字進制被標準SQL用作列名和/或表名(例如,GROUP)。少數被保留了,因為MySQL需要它們,(目前)使用yacc解析程序。保留字被引起來后可以用作識別符。

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

MySQL允許部分關鍵字用做未引起來的識別符,因為許多人以前曾使用過它們。下面列出了一些例子:

  • ACTION

  • BIT

  • DATE

  • ENUM

  • NO

  • TEXT

  • TIME

  • TIMESTAMP

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/language-structure.html
北斗有巢氏 有巢氏北斗