SQLiteで定義されているキーワードに関する注意点

SQLite では数多くのキーワードが定義されています。これらのキーワードはテーブル名やカラム名などに使用することはできませんが、適切な記述方法をすることで使用も可能です。ここでは SQLite で定義されているキーワードに関する注意点、及びキーワードの一覧について解説します。

(Last modified: )

キーワードを識別子として使用する方法

SQLite では多くのキーワードが定義されています。あとで一覧を記載しますが TABLE や SELECT といった言葉はキーワードです。キーワードは予約語とも呼ぶ場合があります。

テーブル名やデータベース名は識別子と呼ばれます。識別子にはアルファベットや数字などを組み合わせて付けることができます。例えば booktable や name などです。ただし SQLite のキーワードはそのままでは識別子として使用することができません。例えば select をテーブル名として使用しようとするとエラーが表示されます。

create table select(id, name);

キーワードを識別子として使用する方法(1)

キーワードをテーブル名などに使用するのはできるかぎり避けた方がいいですが、何らかの理由でキーワードを識別子と使用したい場合には、次の4つのいずれかの方法を使います。

'keyword'
"keyword"
[keyword]
`keyword`

シングルクォーテーション(')でキーワードを囲った場合、文字列の値として扱われます。識別子を記述すべきところにシングルクォーテーションで囲んだ文字列の値を記述すると識別子として扱われるためこの形式でも指定することができます。

先ほどはエラーとなりましたが、テーブル名として 'select' のように指定した場合はエラーにならずにテーブルを作成できます。

create table 'select'(id, name);

キーワードを識別子として使用する方法(2)

ダブルクォーテーション(")、角括弧([])、グレイヴ・アクセント(`)でキーワードを囲った場合でも同じです。(なお文字列を記述すべきところにダブルクォーテーションで囲んだ識別子を記述すると文字列として扱われます)。

create table "select"(id, name);

キーワードを識別子として使用する方法(3)

なお角括弧は Access や SQL Server で使われている方式でグレイブ・アクセントは MySQL で使われている方式です。この2つの方式はそれぞれのデータベースとの互換性を保つために用意されていますものなので、通常はシングルクォーテーションかダブルクォーテーションで囲って使用します。

SQLiteのキーワード一覧

SQLite のキーワードとして定義されているものを下記に記載します。これは下記の公式サイトに掲載されていたものです。

SQLite Keywords

SQLiteのキーワード一覧(1)

SQLite 3.46.0 で定義されているキーワードは、全部で 147 個あります。

ABORT
ACTION
ADD
AFTER
ALL
ALTER
ALWAYS
ANALYZE
AND
AS
ASC
ATTACH
AUTOINCREMENT
BEFORE
BEGIN
BETWEEN
BY
CASCADE
CASE
CAST
CHECK
COLLATE
COLUMN
COMMIT
CONFLICT
CONSTRAINT
CREATE
CROSS
CURRENT
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
DATABASE
DEFAULT
DEFERRABLE
DEFERRED
DELETE
DESC
DETACH
DISTINCT
DO
DROP
EACH
ELSE
END
ESCAPE
EXCEPT
EXCLUDE
EXCLUSIVE
EXISTS
EXPLAIN
FAIL
FILTER
FIRST
FOLLOWING
FOR
FOREIGN
FROM
FULL
GENERATED
GLOB
GROUP
GROUPS
HAVING
IF
IGNORE
IMMEDIATE
IN
INDEX
INDEXED
INITIALLY
INNER
INSERT
INSTEAD
INTERSECT
INTO
IS
ISNULL
JOIN
KEY
LAST
LEFT
LIKE
LIMIT
MATCH
MATERIALIZED
NATURAL
NO
NOT
NOTHING
NOTNULL
NULL
NULLS
OF
OFFSET
ON
OR
ORDER
OTHERS
OUTER
OVER
PARTITION
PLAN
PRAGMA
PRECEDING
PRIMARY
QUERY
RAISE
RANGE
RECURSIVE
REFERENCES
REGEXP
REINDEX
RELEASE
RENAME
REPLACE
RESTRICT
RETURNING
RIGHT
ROLLBACK
ROW
ROWS
SAVEPOINT
SELECT
SET
TABLE
TEMP
TEMPORARY
THEN
TIES
TO
TRANSACTION
TRIGGER
UNBOUNDED
UNION
UNIQUE
UPDATE
USING
VACUUM
VALUES
VIEW
VIRTUAL
WHEN
WHERE
WINDOW
WITH
WITHOUT

なおこの中の一部のキーワードは特にダブルクォーテーションなどで囲わなくても識別子として使用できるものもあるようです。ただキーワードをそのまま識別子として使用すると分かりにくくなりますのであまり望ましい使い方ではないと思います。

テーブルなどを作成する時に原因不明のエラーになる場合は、テーブル名やカラム名などがキーワードになっていないかどうか確認されてみて下さい。

-- --

SQLite で定義されているキーワードに関する注意点、及びキーワードの一覧について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。