Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/schema/create/ Documentation version: v5.3.2 # CREATE SCHEMA `CREATE SCHEMA`语句用于在当前 Catalog 中创建 Schema。 Schema 是一种系统对象,用作图类型、图和过程等普通对象的容器。 当服务组初始化后,系统会自动创建`/default_schema`,其作为存储图的资源对象的默认 Schema。当会话启动时,该 Schema 会被自动设置为当前用户的主 Schema 并成为当前会话的 Schema。 创建 Schema 的用户会成为该 Schema 的 Owner,并隐式拥有`USAGE`。其他用户必须先获得`USAGE`,才能发现、切换到或访问该 Schema。更多信息,请参见 [Schema 访问控制](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/schema-access-control/)。 - 若要为当前用户更改主 Schema,可使用 [ALTER USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/alter-user/)。 - 若要为当前会话更改 Schema,可使用 [SESSION SET](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/)。 ## 前提条件 具备在当前 Catalog 执行`CREATE SCHEMA`操作的权限。更多信息,请参见[角色与权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/)。 ## 语法 语法图源码 create_schema_statement ```` create_schema_statement ::= 'CREATE' 'SCHEMA' ('IF NOT EXISTS')? schema_reference ```` ## 参数 ### `IF NOT EXISTS` 该子句会检查是否已经存在相同路径下的 Schema。如果已经存在,则不会创建 Schema,也不会抛出异常。 若不指定该子句,且相同路径下已存在 Schema,则会抛出异常。 ### `schema_reference` 所引用的 Schema 路径。此处即待创建的 Schema 的路径。 绝对路径或相对路径均可在语句中使用。 - 绝对路径必须以`/`开头。例如,`/test1`和`/test2/test3`。 - 相对路径必须以`../`开头。例如,`../test1`和`../test2/test3`。 当使用相对路径时,其对应的绝对路径是基于当前会话中设置的 Schema 来确定的。例如: - 若当前会话的 Schema 设置为`/default_schema`,其路径深度为 1: - 相对路径`../test1`将解析为绝对路径`/test1`。 - 相对路径`../test2/test3`将解析为绝对路径`/test2/test3`。 - 若当前会话的 Schema 设置为`/my_test/test0`,其路径深度为 2: - 相对路径`../test1`将解析为绝对路径`/my_test/test1`。 - 相对路径`../test2/test3`将解析为绝对路径`/my_test/test2/test3`。 - 相对路径`../../test4`将解析为绝对路径`/test4`。 在类 Unix 系统中,根目录(/)是最高级别的目录,无法再通过`../`向上遍历。因此,在解析相对路径时,任何会将路径移到根路径`/`之上的`../`都会被忽略。例如,若当前会话的 Schema 设置为`/default_schema`,其路径深度为 1,则相对路径`../../test1`和`../../../test1`等同于`../test1`,均解析为绝对路径`/test1`。 注意以下限制: - 待创建的 Schema 路径不得与已有 Schema 的路径冲突。例如,若路径`/my_test`下已存在 Schema,则不能在其子路径,比如`/my_test/test1`或`/my_test/test1/test2`,创建其他 Schema。 - 路径`/tmp_schema`被系统保留,无法用于创建 Schema。 ## 示例 ### 使用绝对路径创建 Schema ```` CREATE SCHEMA IF NOT EXISTS /test/my_schema1 ```` 上述示例在路径`/test/my_schema1`中创建一个 Schema。 ### 使用相对路径创建 Schema ```` ''' // 创建 Schema CREATE SCHEMA IF NOT EXISTS /test/my_schema1 ''' ''' // 为当前会话设置 Schema SESSION SET SCHEMA /test/my_schema1 ''' ''' // 使用相对路径创建 Schema CREATE SCHEMA IF NOT EXISTS ../my_schema2 ''' ```` 上述示例在当前会话中的 Schema 为`/test/my_schema1`的情况下,在路径`/test/my_schema2`中创建一个 Schema。 ## 更多信息 - [SHOW CURRENT_SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-current-schema/) - [SHOW SCHEMAS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-schemas/) - [EXPORT SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/export-schemas/)