*** DRAFT ***
Search for:

SQL As Understood By SQLite

[Top]

SQLite Keywords

The SQL standard specifies a huge number of keywords which may not be used as the names of tables, indices, columns, databases, user-defined functions, collations, virtual table modules, or any other named object. The list of keywords is so long that few people can remember them all. For most SQL code, your safest bet is to never use any English language word as the name of a user-defined object.

If you want to use a keyword as a name, you need to quote it. There are four ways of quoting keywords in SQLite:

'keyword' A keyword in single quotes is a string literal.
"keyword" A keyword in double-quotes is an identifier.
[keyword] A keyword enclosed in square brackets is an identifier. This is not standard SQL. This quoting mechanism is used by MS Access and SQL Server and is included in SQLite for compatibility.
`keyword` A keyword enclosed in grave accents (ASCII code 96) is an identifier. This is not standard SQL. This quoting mechanism is used by MySQL and is included in SQLite for compatibility.

For resilience when confronted with historical SQL statements, SQLite will sometimes bend the quoting rules above:

Programmers are cautioned not to use the two exceptions described in the previous bullets. We emphasize that they exist only so that old and ill-formed SQL statements will run correctly. Future versions of SQLite might raise errors instead of accepting the malformed statements covered by the exceptions above.

SQLite adds new keywords from time to time when it takes on new features. So to prevent your code from being broken by future enhancements, you should normally quote any identifier that is an English language word, even if you do not have to.

The list below shows all possible keywords used by any build of SQLite regardless of compile-time options. Most reasonable configurations use most or all of these keywords, but some keywords may be omitted when SQL language features are disabled. Regardless of the compile-time configuration, any identifier that is not on the following 124 element list is not a keyword to the SQL parser in SQLite:

  1. ABORT
  2. ACTION
  3. ADD
  4. AFTER
  5. ALL
  6. ALTER
  7. ANALYZE
  8. AND
  9. AS
  10. ASC
  11. ATTACH
  12. AUTOINCREMENT
  13. BEFORE
  14. BEGIN
  15. BETWEEN
  16. BY
  17. CASCADE
  18. CASE
  19. CAST
  20. CHECK
  21. COLLATE
  22. COLUMN
  23. COMMIT
  24. CONFLICT
  25. CONSTRAINT
  26. CREATE
  27. CROSS
  28. CURRENT_DATE
  29. CURRENT_TIME
  30. CURRENT_TIMESTAMP
  31. DATABASE
  32. DEFAULT
  33. DEFERRABLE
  34. DEFERRED
  35. DELETE
  36. DESC
  37. DETACH
  38. DISTINCT
  39. DROP
  40. EACH
  41. ELSE
  42. END
  43. ESCAPE
  44. EXCEPT
  45. EXCLUSIVE
  46. EXISTS
  47. EXPLAIN
  48. FAIL
  49. FOR
  50. FOREIGN
  51. FROM
  52. FULL
  53. GLOB
  54. GROUP
  55. HAVING
  56. IF
  57. IGNORE
  58. IMMEDIATE
  59. IN
  60. INDEX
  61. INDEXED
  62. INITIALLY
  63. INNER
  64. INSERT
  65. INSTEAD
  66. INTERSECT
  67. INTO
  68. IS
  69. ISNULL
  70. JOIN
  71. KEY
  72. LEFT
  73. LIKE
  74. LIMIT
  75. MATCH
  76. NATURAL
  77. NO
  78. NOT
  79. NOTNULL
  80. NULL
  81. OF
  82. OFFSET
  83. ON
  84. OR
  85. ORDER
  86. OUTER
  87. PLAN
  88. PRAGMA
  89. PRIMARY
  90. QUERY
  91. RAISE
  92. RECURSIVE
  93. REFERENCES
  94. REGEXP
  95. REINDEX
  96. RELEASE
  97. RENAME
  98. REPLACE
  99. RESTRICT
  100. RIGHT
  101. ROLLBACK
  102. ROW
  103. SAVEPOINT
  104. SELECT
  105. SET
  106. TABLE
  107. TEMP
  108. TEMPORARY
  109. THEN
  110. TO
  111. TRANSACTION
  112. TRIGGER
  113. UNION
  114. UNIQUE
  115. UPDATE
  116. USING
  117. VACUUM
  118. VALUES
  119. VIEW
  120. VIRTUAL
  121. WHEN
  122. WHERE
  123. WITH
  124. WITHOUT

*** DRAFT ***