MySQLのシノニム

sakaik さんが MySQL: desc は explain !? - sakaikの日々雑感~(T)編 という記事を上げてたのを見て、そういや最近はほかにどんなのがあるんだっけ…と思って調べてみた。

以下はMySQL 8.0.29 の sql/lex.h から抽出したもの。字句解析上のシノニム。

<> !=
ANY SOME
BIGINT INT8
CHAR CHARACTER
COLUMNS FIELDS
CURDATE* CURRENT_DATE
CURTIME* CURRENT_TIME
DATABASE SCHEMA
DATABASES SCHEMAS
DAY SQL_TSI_DAY
DECIMAL DEC
DESCRIBE EXPLAIN
DISTINCT DISTINCTROW
DOUBLE FLOAT8
FLOAT FLOAT4
GEOMETRYCOLLECTION GEOMCOLLECTION
HOUR SQL_TSI_HOUR
INT INT4 INTEGER
MEDIUMINT INT3 MIDDLEINT
MINUTE SQL_TSI_MINUTE
MONTH SQL_TSI_MONTH
NDBCLUSTER NDB
NOW* CURRENT_TIMESTAMP LOCALTIME LOCALTIMESTAMP
QUARTER SQL_TSI_QUARTER
REGEXP RLIKE
RELAY_THREAD IO_THREAD
SECOND SQL_TSI_SECOND
SMALLINT INT2
STD* STDDEV* STDDEV_POP*
SUBSTRING* MID* SUBSTR*
TINYINT INT1
USER SESSION_USER* SYSTEM_USER*
VARCHAR VARCHARACTER
VARIANCE* VAR_POP*
WEEK SQL_TSI_WEEK
YEAR SQL_TSI_YEAR

* がついてるのは関数でしか使えない単語。 たとえば、 SELECT CURRENT_TIMESTAMPSELECT CURRENT_TIMESTAMP() はどちらも使えるけど、SELECT NOW はダメで、SELECT NOW() はOK。みたいな。

USER は関数形式じゃなくても使えるけど、SELECT USER みたいに使えるというわけじゃない。CREATE USER とかで使えるということ。

CHARSET を書けるところは CHARACTER SET とも書けるんだけど、これは字句解析じゃなくて構文解析の処理の方なのでここには書いてない。構文解析を調べるのはめんどくさい。