#标识符
YashanDB中包括两类标识符:
- 作为语法关键字,用于定界SQL语法树的位置;作为系统保留语法关键字将不能作为数据库对象的名称。
- 作为数据库对象的名称,用于表名、列名、别名等用途,但需满足下述命名规范。
# 命名规范
标识符作为名称时存在如下规则和约束:(不使用双引号时)
- 支持所有的大小写字母和数字,且大小写不敏感。
- 不能出现特殊字符'\0' ',' ' ' '+' '-' '*' '/' '|' '(' '%' ':' '?' '.' '\t' '\r' '\n' '=' '\\' '!' '>' '<' ';' '&' '^' '"' '~' ''' '{' '}' '[' ']'等。
- 不能使用系统保留语法关键字作为名称(包括大小写)。
当在标识符前后使用双引号时:
- 不受上述约束限制,即名称内可以出现特殊字符,可以非字母开头,并可以使用系统保留语法关键字作为名称。
- 对大小写的处理需满足下表规则:(同时需满足双引号的通用规则)
标识符 | 双引号 | 定义名称时 | 引用名称时 |
---|---|---|---|
满足约束 | 使用双引号 | 可选 | 全大写定义名称: * 加双引号引用时,严格区分大小写 * 不加双引号引用时,不区分大小写 非全大写定义名称: * 必须加双引号引用 * 严格区分大小写 |
满足约束 | 不使用双引号 | 可选 | * 不区分大小写 |
违反约束 | 使用双引号 | 必须 | * 必须加双引号引用 * 严格区分大小写 |
违反约束 | 不使用双引号 | 报错 | 报错 |
# 使用示例
-- 符合约束的标识符作为名称,定义时使用双引号
CREATE TABLE "CREATE01" (c1 INT); -- 按全大写定义名称
Succeed.
INSERT INTO Create01 VALUES(1); -- 不加双引号引用时,不区分大小写
1 row affected.
INSERT INTO "Create01" VALUES(1); -- 加双引号引用时,严格区分大小写
[1:12]YAS-02012 table or view does not exist
DROP TABLE Create01;
Succeed.
CREATE TABLE "CREATe01" (c1 INT); -- 按非全大写定义名称时,引用名称时必须使用双引号,且严格区分大小写
Succeed.
INSERT INTO CREATE01 VALUES(1);
[1:12]YAS-02012 table or view does not exist
INSERT INTO "CREATE01" VALUES(1);
[1:12]YAS-02012 table or view does not exist
INSERT INTO "CREATe01" VALUES(1);
1 row affected.
-- 违反约束的标识符作为名称,定义和引用都必须使用双引号
CREATE TABLE "CREATE" (c1 INT); -- 按全大写定义名称时,引用时严格区分大小写
Succeed.
INSERT INTO CREATE VALUES(1);
[1:12]YAS-04202 missing or invalid table name
INSERT INTO "CREATE" VALUES(1);
1 row affected.
INSERT INTO "Create" VALUES(1);
[1:12]YAS-02012 table or view does not exist
DROP TABLE "CREATE";
Succeed.
CREATE TABLE "Create" (c1 INT); -- 按非全大写定义名称时,引用时严格区分大小写
Succeed.
INSERT INTO Create VALUES(1);
[1:12]YAS-04202 missing or invalid table name
INSERT INTO "CREATE" VALUES(1);
[1:12]YAS-02012 table or view does not exist
INSERT INTO "Create" VALUES(1);
1 row affected.