識別子と予約語

MySQL で作成したデータベースやテーブルに付ける名前のことを識別子と呼びます。通常識別子はそのまま記述することができるのですが、予約語として登録されている単語を使用する場合には特別な記述方法をする必要があります。ここでは MySQL における識別子と予約語の扱い、および MySQL の予約語の一覧について解説します。

(Last modified: )

識別子の記述方法

データベースやテーブル、カラム、インデックスをなどを作成する時に名前を指定します。この名前のことを識別子と呼びます。

識別子は例外を除いてシングルクォーテーションなどで囲う必要はありません。そのまま記述できます。

create database personal;
create table addresstbl (id int, address varchar(20));

識別子に予約語をそのまま使用する場合や特別な文字が含まれる場合は引用符で囲う必要があります。引用符はバッククォート(`)です。

create database `where`;

識別子の記述方法(1)

ただし予約語や特別な文字を含むような識別子を使うことはできる限り避けるべきだと思います。

データベース名やテーブル名として識別子を付ける場合には長さに制限があります。

データベース名    64byte
テーブル名       64byte
カラム名        64byte
インデックス名    64byte
エイリアス名      255byte

文字数ではなくバイト数である点に注意して下さい。

MySQLの予約語一覧

MySQL で予約語として登録されている単語は以下の通りです。

ACCESSIBLE
ADD
ALL
ALTER
ANALYZE
AND
ARRAY
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
CUBE; became reserved in 8.0.1
CUME_DIST added in 8.0.2 (reserved)
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
DENSE_RANK; added in 8.0.2 (reserved)
DESC
DESCRIBE
DETERMINISTIC
DISTINCT
DISTINCTROW
DIV
DOUBLE
DROP
DUAL
EACH
ELSE
ELSEIF
EMPTY; added in 8.0.4 (reserved)
ENCLOSED
ESCAPED
EXCEPT
EXISTS
EXIT
EXPLAIN
FALSE
FETCH
FIRST_VALUE; added in 8.0.2 (reserved)
FLOAT
FLOAT4
FLOAT8
FOR
FORCE
FOREIGN
FROM
FULLTEXT
FUNCTION; became reserved in 8.0.1
GENERATED
GET
GRANT
GROUP
GROUPING; added in 8.0.1 (reserved)
GROUPS; added in 8.0.2 (reserved)
HAVING
HIGH_PRIORITY
HOUR_MICROSECOND
HOUR_MINUTE
HOUR_SECOND
IF
IGNORE
IN
INDEX
INFILEx
INNER
INOUT
INSENSITIVE
INSERT
INT
INT1
INT2
INT3
INT4
INT8
INTEGER
INTERVAL
INTO
IO_AFTER_GTIDS
IO_BEFORE_GTIDS
IS
ITERATE
JOIN
JSON_TABLE; added in 8.0.4 (reserved)
KEY
KEYS
KILL
LAG; added in 8.0.2 (reserved)
LAST_VALUE; added in 8.0.2 (reserved)
LATERAL; added in 8.0.14 (reserved)
LEAD; added in 8.0.2 (reserved)
LEADING
LEAVE
LEFT
LIKE
LIMIT
LINEAR
LINES
LOAD
LOCALTIME
LOCALTIMESTAMP
LOCK
LONG
LONGBLOB
LONGTEXT
LOOP
LOW_PRIORITY
MASTER
MASTER_BIND
MASTER_SSL_VERIFY_SERVER_CERT
MATCH
MAXVALUE
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MEMBER; added in 8.0.18 (reserved)
MIDDLEINT
MINUTE_MICROSECOND
MINUTE_SECOND
MOD
MODIFIES
NATURAL
NOT
NO_WRITE_TO_BINLOG
NTH_VALUE; added in 8.0.2 (reserved)
NTILE; added in 8.0.2 (reserved)
NULL
NUMERIC
OF; added in 8.0.1 (reserved)
ON
OPTIMIZE
OPTIMIZER_COSTS
OPTION
OPTIONALLY
OR
ORDER
OUT
OUTER
OUTFILE
OVER; added in 8.0.2 (reserved)
PARTITION
PERCENT_RANK; added in 8.0.2 (reserved)
PRECISION
PRIMARY
PROCEDURE
PURGE
RANGE
RANK; added in 8.0.2 (reserved)
READ
READS
READ_WRITE
REAL
RECURSIVE; added in 8.0.1 (reserved)
REFERENCES
REGEXP
RELEASE
RENAME
REPEAT
REPLACE
REQUIRE
RESIGNAL
RESTRICT
RETURN
REVOKE
RIGHT
RLIKE
ROW; became reserved in 8.0.2
ROWS; became reserved in 8.0.2
ROW_NUMBER; added in 8.0.2 (reserved)
SCHEMA
SCHEMAS
SECOND_MICROSECOND
SELECT
SENSITIVE
SEPARATOR
SET
SHOW
SIGNAL
SMALLINT
SPATIAL
SPECIFIC
SQL
SQLEXCEPTION
SQLSTATE
SQLWARNING
SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT
SSL
STARTING
STORED
STRAIGHT_JOIN
SYSTEM; added in 8.0.3 (reserved)
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
VIRTUAL
WHEN
WHERE
WHILE
WINDOW; added in 8.0.2 (reserved)
WITH
WRITE
XOR
YEAR_MONTH
ZEROFILL

-- --

MySQL における識別子と予約語の扱いに関して解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。