SELECT
、DELETE
、もしくはBIGINT
といった特定語はテーブルやカラム名といった識別子として使用するために予約されており、特別扱いを受けます。ビルトインファンクション名に対しても同様のことが言える場合があります。
項8.2. 「識別子」を記述するのに予約語を引用符で囲む場合、その予約語は識別子として許可されます。
mysql>CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax ... near 'interval (begin INT, end INT)' mysql>CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)
例外:修飾名で点の後に続く語は識別子のため、予約語でも引用符で囲む必要はありません。
mysql> CREATE TABLE mydb.interval (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)
ビルトインファンクション名は識別子として許可されますが、識別子として使用する場合は注意してください。例えば、COUNT
はカラム名として許可されます。しかし、デフォルトでは、ファンクション名と後続の‘(
’文字間のファンクション起動では余白は許可されていません。この条件では、ファンクション呼び出しもしくは非ファンクションコンテキストで名前が使用されているかどうかを、パーサが区別するのを許可します。ファンクション名の認識についてより詳しく知りたい場合は次を参照してください。項8.2.4. 「構文解析と解像度のファンクション名」
次のテーブルに記された語はMySQL上で明確に予約されています。5.1今後バージョンアップする時のことを考慮に入れて、使用予定のある予約語を参照してみましょう。MySQLのバージョンアップ後もカバーするマニュアルではこれらを確認できます。テーブル内のたいていの語は標準SQLでカラムもしくはテーブル名としては許可されません(例:GROUP
)。MySQLがyaccパーサを使用、必要とするために、予約されている語もあります。予約語は引用符で囲まれた場合、識別子として使用できます。
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 |
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_ONLY |
READ_WRITE |
REAL |
REFERENCES |
REGEXP |
RELEASE |
RENAME |
REPEAT |
REPLACE |
REQUIRE |
RESTRICT |
RETURN |
REVOKE |
RIGHT |
RLIKE |
SCHEMA |
SCHEMAS |
SECOND_MICROSECOND |
SELECT |
SENSITIVE |
SEPARATOR |
SET |
SHOW |
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.1で登場する新規の予約語です。
ACCESSIBLE |
LINEAR |
MASTER_SSL_VERIFY_SERVER_CERT |
RANGE |
READ_WRITE |
MySQLでは、引用符で囲まれてない識別子をキーワードとして使用できますが、これは多くのユーザが以前から使用していたからです。下記リストに例を記します。
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP