SQL标准指定了大量关键字,这些关键字不能用作表,索引,列,数据库,用户定义的函数,归类,虚拟表模块或任何其他命名对象的名称。关键字列表如此之长,以至于很少有人能记住它们。对于大多数SQL代码,最安全的选择是永远不要使用任何英语单词作为用户定义对象的名称。
如果要使用关键字作为名称,则需要用引号引起来。SQLite中有四种引用关键字的方式:
'关键词' 单引号中的关键字是字符串文字。 “关键词” 双引号中的关键字是标识符。 [关键词] 用方括号括起来的关键字是一个标识符。这不是标准的SQL。该引用机制由MS Access和SQL Server使用,并且包含在SQLite中以实现兼容性。 关键字 用重音符号括起来的关键字(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解析器的关键字: