
# 创建和管理Schema
Schema又称作模式，从逻辑上组织一个数据库中的对象和数据。通过管理Schema，允许多个用户使用同一数据库而不相互干扰，同时便于将第三方应用添加到相应的Schema下而不引起冲突。
相同的数据库对象名称可以应用在同一数据库的不同Schema中，而没有冲突。例如，a_schema和b_schema都可以包含名为mytable的表。具有所需权限的用户可以访问数据库的多个Schema中的对象。
#### 创建Schema
使用CREATE SCHEMA命令来创建一个新的Schema。
```
CREATE SCHEMA myschema;
```
如果需要在模式中创建或者访问对象，其完整的对象名称由模式名称和具体的对象名称组成。中间由符号"."隔开。例如：myschema.table。
#### 设置Schema搜索路径
GUC参数search_path设置Schema的搜索顺序，参数取值形式为采用逗号分隔的Schema名称列表。如果创建对象时未指定目标Schema，则该对象会被添加到搜索路径中列出的第一个Schema中。当不同Schema中存在同名的对象时，查询对象未指定Schema的情况下，将从搜索路径中包含该对象的第一个Schema中返回对象。
- 使用SHOW命令查看当前搜索路径。
  ```
  SHOW SEARCH_PATH;
  ```
  
- 使用SET命令修改当前会话的默认Schema。例如，将搜索路径设置为myschema1、myschema2，首先搜索myschema1。
  ```
  SET SEARCH_PATH TO myschema1, myschema2;
  ```
  
 
#### 使用Schema
在特定Schema下创建对象或者访问特定Schema下的对象，需要使用有Schema修饰的对象名。名称包含Schema名以及对象名，之间用"."号分开。
- 在myschema下创建mytable表。以schema_name.table_name格式创建表。
  ```
  CREATE TABLE myschema.mytable(id int, name varchar(20)) STORE AS ORC;
  ```
  
- 查询myschema下mytable表的所有数据。
  ```
  SELECT * FROM myschema.mytable;
   id | name
  ----+------
  (0 rows)
  ```
  
 
#### 查看Schema
- 使用current_schema函数查看当前Schema：
  ```
  SHOW current_schema;
   current_schema 
  ----------------
   
  (1 row)
  ```
  
- 要查看所有Schema的列表，请执行。
  ```
  SHOW SCHEMAS;
  ```
  
- 要查看某Schema详细信息，请执行。
  ```
  DESCRIBE SCHEMA myschema;
  ```
  
 
#### Schema的权限控制
默认情况下，用户只能访问属于自己的Schema中的数据库对象。如需要访问其他Schema的对象，则需赋予对应Schema的usage权限。
当前Aura不支持通过SQL执行权限相关操作。您可以通过LakeFormation界面执行权限相关操作，具体操作方法可以参见[LakeFormation数据权限概述](https://support.huaweicloud.com/usermanual-lakeformation/lakeformation_03_00014.html)。
#### 删除Schema
- 使用DROP SCHEMA命令删除一个空的Schema（即该Schema下没有数据库对象）。
  ```
  DROP SCHEMA IF EXISTS myschema;
  ```
  
- 默认情况下，删除一个Schema前，它必须为空。 要删除一个Schema及其包含的所有对象（表、数据、函数等），需要使用CASCADE关键字。
  ```
  DROP SCHEMA myschema CASCADE;
  ```
  
 
