上例中给出的如SELECT, UPDATE, 或 VALUES都是在SQL语句中有特定含义的记号,即关键字。记号MY_TABLE和A是标识符,根据使用它们的命令不同,它们标识表名,列名或者其他的数据库元素。因此,它们有时候被称为”名字”。关键字和标识符有同样的词法结构,意味着在不懂这种语言时很难判断一个记号是标识符或关键字。
SQL的标识符和关键字必须以一个字母(a-z,以及带变音符的字母和非拉丁字母)或下划线(_)开头,随后的字符可以是字母、下划线、数字(0-9)、美元符号($)。需要注意的是,根据SQL标准,美元符号不允许出现在标识符中,因此使用美元符号将不易移植。SQL 标准不会定义包含数字或者以下划线开头或结尾的关键字, 因此这种格式的标识符是安全的,不会和将来标准的扩展特性冲突。
关键字和未被引号包围的标识符都是大小写无关的。因此:
UPDATE MY_TABLE SET A = 5;
也可以等效地写成:
uPDaTE my_TabLE SeT a = 5;
一种好习惯是把关键字写成大写,而名字等用小写:
UPDATE my_table SET a = 5;
还有第二种标识符:分隔标识符或 引号包围的标识符。 它是在双引号(“)中包围任意字符序列形成的。分割标识符总是一个标识符,而不是关键字。因此你可以用“select”表示一个列名或者表名,然而一个没有引号的select将会被视为一个关键词,如果将它当作表名或列名时就会导致一个解析错误。上面的例子可以用引号包围的标识符这么写:
UPDATE "my_table" SET "a" = 5;
引号包围的标识符可以包含编码不等于零的任意字符(如要包含一个双引号,需要写两个相连的双引号)。这样我们就可以构造那些原本是不允许的表名或者字段名,比如那些包含空白或与号(&)的名字。但长度限制依旧。
虽然不带引号的标识符总是会被折叠为小写,但是一个带引号的标识符是大小写敏感的。例如,标识符FOO, foo和”foo”被WuTongDB视为相同的,但是 “Foo”和”FOO”与这三者不同。(WuTongDB将不带引号的标识符折叠为小写与SQL标准不相容,SQL标准将不带引号的标识符折叠为大写。因此,foo 应该等价于SQL标准的”FOO” 而不是”foo”。如果你希望程序有较高的移植性,你应该一直使用带引号的标识符或一直使用不带引号的标识符。)




