SQL 标准指定了大量关键字,这些关键字不能用作表、索引、列、数据库、用户定义函数、排序规则、虚拟表模块或任何其他命名对象的名称。关键字列表很长,很少有人能记住它们。对于大多数 SQL 代码,最安全的做法是永远不要使用任何英语单词作为用户定义对象的名称。
如果要使用关键字作为名称,则需要引用它。SQLite 中有四种引用关键字的方式:
'keyword' 单引号中的关键字是字符串文字。 "keyword" 双引号中的关键字是标识符。 [keyword] 方括号中的关键字是标识符。这不是标准的 SQL。此引用机制由 MS Access 和 SQL Server 使用,并包含在 SQLite 中以实现兼容性。 `keyword` 重音符号(ASCII 代码 96)中包含的关键字是标识符。这不是标准的 SQL。这种引用机制由 MySQL 使用,并包含在 SQLite 中以实现兼容性。
为了在面对历史 SQL 语句时具有弹性,SQLite 有时会改变上面的引用规则:
如果在允许使用标识符但不允许使用字符串文字的上下文中使用单引号中的关键字(例如:'key'或'glob' ),则令牌将被理解为标识符而不是字符串文字.
如果双引号中的关键字(例如:"key"或"glob")用于无法解析为标识符但允许使用字符串文字的上下文中,则令牌将被理解为字符串文字而不是一个标识符。
程序员被警告不要使用前面项目符号中描述的两个异常。我们强调它们的存在只是为了让旧的和格式错误的 SQL 语句能够正确运行。SQLite 的未来版本可能会引发错误,而不是接受上述异常所涵盖的格式错误的语句。
SQLite 在承担新功能时会不时添加新关键字。因此,为了防止您的代码被未来的增强功能破坏,您通常应该引用任何英语单词的标识符,即使您不必这样做。
下面的列表显示了任何构建的 SQLite 使用的所有可能的关键字,无论编译时选项如何。最合理的配置使用大部分或全部这些关键字,但当禁用 SQL 语言功能时,一些关键字可能会被省略。应用程序可以使用 sqlite3_keyword_count()、sqlite3_keyword_name()和 sqlite3_keyword_check()接口来确定 SQLite 在运行时识别的关键字。无论编译时配置如何,不在以下 147 个元素列表中的任何标识符都不是 SQLite 中 SQL 解析器的关键字:
- 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