SQL 对象名#

本文介绍 OpenMLDB SQL 语句中的对象名。

对象名用于命名OpenMLDB中所有的对象,包括 database、table、column、index、function、deployment 等等。在 SQL 语句中,可以通过标识符 (identifier) 来引用这些对象。

标识符#

标识符可以被反引号包裹,即 SELECT * FROM t 也可以写成 SELECT * FROM t``。但如果标识符中存在至少一个特殊符号,或者它是一个保留关键字,那就必须使用反引号包裹来引用它所代表的模式对象。

CREATE TABLE `JOIN` (`select` INT);

不允许标识符中包含`字符。

CREATE TABLE a`b (a int);
Syntax error: Unclosed identifier literal [at 1:15]
CREATE TABLE a`b (a int);

限定标识符#

OpenMLDB中的对象名可以是限定的或者非限定的标识符。

限定的对象名:#

限定的对象名至少包含一个限定词来描述特定的上下文环境。

  • 限定词和对象名使用用.隔开。如db_name.tbl_name

  • 当包含多个限定词时,限定词与限定词使用.符号隔开。如db_name.tbl_name.col_name

  • . 的左右两端可以出现空格,tbl_name.col_name 等于 tbl_name . col_name

例如,已知系统中有两个数据库,分别为db0db1db1中有表t1。当我们使用USE db0将系统的默认数据库设置为db0。当使用db1.t1这个限定标识符来表示一张表时,表t1所在的上下文是在数据库db1

USE db0;
SELECT * FROM db1.t1;

非限定的对象名:#

非限定的对象名不包含任何限定词的修饰,只包含对象标识符本身

如果在给定上下文下,直接使用标识符不会引起混淆,那么就可以非限定的使用标识符来表示对象。例如,我们使用USE db1将系统的默认数据库设置为db1。此时,可以直接使用非限定的对象名t1来代表默认数据库db0中的表t1

USE db1;
SELECT * from t1;