SELECT
、DELETE
、または
BIGINT
といった特定語はテーブルやカラム名といった識別子として使用するために予約されており、特別扱いを受けます。組み込み関数名に対しても同様のことが言える場合があります。
項5.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
はカラム名として許可されます。しかし、デフォルトにより、関数の呼び出しでは関数名とそれに続く
「(
」
文字の間に空白を入れることはできません。この要件によって、パーサーはその名前が関数の呼び出しで使用されるのか、それとも関数でないコンテキストで使用されるのかを判別できます。関数名の識別についての詳細は、項5.2.4. 「関数名の構文解析と解決」を参照してください。
次の表に示す語は、MySQL 5.1
で明示的に予約されています。さらに、_FILENAME
も予約されています。今後バージョンアップするときのことを考慮に入れて、使用予定のある予約語を確認しておくことをお勧めします。MySQL
のバージョンアップ後もカバーするドキュメントではこれらを確認できます。テーブル内のたいていの語は標準
SQL
でカラムまたはテーブル名としては許可されません
(例: GROUP
)。MySQL が
yacc
パーサーを使用、必要とするために、予約されている語もあります。予約語は引用符で囲まれた場合、識別子として使用できます。
バージョン間の違いも含めた予約語の詳細なリストについては、Reserved Words in MySQL 5.1を参照してください。
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 |
VARCHAR |
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 |
MASTER_SSL_VERIFY_SERVER_CERT |
READ |
READS |
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 |
MASTER_SSL_VERIFY_SERVER_CERT |
RANGE |
READ_WRITE |
MySQL では、引用符で囲まれてない識別子をキーワードとして使用できますが、これは多くのユーザーが以前から使用していたからです。下記リストに例を記します。
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP