DROP SCHEMA
删除 schema。对于外部架构,您还可以删除与该架构关联的外部数据库。此命令无法撤消。
所需的权限
以下是 DROP SCHEMA 所需的权限:
Superuser
Schema 拥有者
具有 DROP SCHEMA 权限的用户
语法
DROP SCHEMA [ IF EXISTS ] name [, ...] [ DROP EXTERNAL DATABASE ] [ CASCADE | RESTRICT ]
参数
- IF EXISTS
-
一个子句,指示如果指定的 schema 不存在,则命令不应进行任何更改,并返回一条指示 schema 不存在的消息,而不是以错误终止。
此子句在编写脚本时很有用,可使在 DROP SCHEMA 针对不存在的 schema 运行时脚本不会失败。
- 名称
-
要删除的架构的名称。您可以指定以逗号分隔的多个架构名称。
- DROP EXTERNAL DATABASE
-
这个子句指示,如果删除外部架构,则删除与它关联的外部数据库(如果存在)。如果不存在外部数据库,则该命令将返回一条消息,说明不存在外部数据库。如果删除多个外部架构,则删除与指定架构关联的所有数据库。
如果外部数据库包含从属对象(如表),则还应包括 CASCADE 选项以删除从属对象。
删除外部数据库时,还会删除与该数据库关联的任何其他外部架构的数据库。使用该数据库的其他外部架构中定义的表也将被删除。
DROP EXTERNAL DATABASE 不支持存储在 HIVE 元存储中的外部数据库。
- CASCADE
-
一个关键字,指示自动删除架构中所有对象。如果指定了 DROP EXTERNAL DATABASE,则还会删除外部数据库中的所有对象。
- RESTRICT
-
一个关键字,指示如果架构中包含任何对象,则不删除该架构或外部数据库。此操作是默认操作。
示例
以下示例删除名为 S_SALES 的架构。本示例使用 RESTRICT 作为安全机制,以便在 schema 包含对象的情况下不会将其删除。在这种情况下,您需要先删除架构对象,然后再删除架构。
drop schema s_sales restrict;
以下示例删除名为 S_SALES 的架构以及依赖该架构的所有对象。
drop schema s_sales cascade;
以下示例删除 S_SALES schema(如果存在);如果不存在该 schema,则不执行任何操作并返回一条消息。
drop schema if exists s_sales;
以下示例删除名为 S_SPECTRUM 的外部架构以及与之关联的外部数据库。此示例使用 RESTRICT,以便在架构和数据库包含任何对象时不会将其删除。在这种情况下,您需要先删除从属对象,然后再删除架构和数据库。
drop schema s_spectrum drop external database restrict;
以下示例删除多个架构、与之关联的外部数据库以及任何从属对象。
drop schema s_sales, s_profit, s_revenue drop external database cascade;