DROP DATABASE

从系统中移除数据库。

小技巧

除了 SQL,您还可以使用其他接口,如 Snowflake REST APIs、Snowflake Python APIs 和 Snowflake CLI。请参阅 备用接口

另请参阅:

CREATE DATABASEALTER DATABASEDESCRIBE DATABASESHOW DATABASESUNDROP DATABASE

语法

DROP DATABASE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
Copy

参数

name

指定要删除的数据库的标识符。如果标识符包含空格、特殊字符或大小写混合字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

CASCADE | RESTRICT

指定如果存在引用数据库中任何表的外键,是否可以删除数据库:

  • CASCADE 会删除数据库和数据库中的所有对象,包括具有由其他表中的外键引用的主键/唯一键的表。

  • RESTRICT 会返回有关现有外键引用的警告,并且不会删除数据库。

默认:CASCADE

使用说明

  • 删除数据库不会将其从系统中永久移除。Time Travel 中会保留已删除数据库的版本,而保留天数由该数据库的 DATA_RETENTION_TIME_IN_DAYS 参数指定:

    1. 在 Time Travel 保留期内,可以使用 UNDROP DATABASE 命令还原已删除的数据库。

    2. 当 Time Travel 保留期结束时,已删除数据库的下一个状态取决于它是永久的还是瞬态的:

      • 永久数据库将进入 故障安全 状态。在故障安全状态下(为期 7 天),可以恢复已删除的数据库,但只能由 Snowflake 恢复。当数据库退出故障安全状态后,它将被清除。

      • 瞬态数据库没有故障安全状态,因此当它移出 Time Travel 后会被清除。

    3. 已删除的数据库一经清除便无法恢复,只能重新创建。

  • 目前,删除数据库时,如果将子架构或表的数据保留期显式设置为不同于数据库的保留期,则不遵守该保留期。子架构或表的保留时间与数据库相同。要遵守这些子对象(架构或表)的数据保留期,请在删除数据库或架构 之前 显式删除它们。

  • 删除数据库后,创建同名数据库将会创建该数据库的新版本。仍然可以使用以下方法还原先前数据库的已删除版本:

    1. 将数据库的当前版本重命名为其他名称。

    2. 使用 UNDROP DATABASE 命令还原先前的版本。

  • 如果有策略或标签附加到表或视图列,则要成功删除数据库,必须让策略或标签自包含在数据库和架构中。例如,database_1 包含 policy_1policy_1 仅在 database_1 中使用。否则,将出现 悬空引用

  • 如果在用户或账户上设置了会话策略或密码策略,则 DROP 操作将失败。

  • 如果指定了 IF EXISTS 子句,而目标对象不存在,该命令会成功完成,不会返回错误。

重要

If the database contains a snapshot set that has an associated snapshot policy with a retention lock, and there are any unexpired snapshots in the snapshot set, then you can't delete the database containing the snapshot set. In that case, you must wait for all the snapshots in the set to expire. This restriction applies even to privileged roles such as ACCOUNTADMIN, and to Snowflake support. For that reason, be careful when specifying retention lock and a long expiration period in a snapshot policy.

Database Replication 使用说明

  • 您可以随时删除辅助数据库。只有数据库所有者(即对数据库具有 OWNERSHIP 权限的角色)才能删除数据库。

  • 如果存在主数据库的一个或多个副本(即辅助数据库),则无法删除该数据库。若要删除主数据库,请先将辅助数据库提升为主数据库,然后删除以前的主数据库。或者,删除主数据库的所有辅助数据库,然后删除主数据库。

    请注意,只有数据库所有者才能删除数据库。

示例

DROP DATABASE mytestdb2;

+---------------------------------+
| status                          |
|---------------------------------|
| MYTESTDB2 successfully dropped. |
+---------------------------------+

SHOW DATABASES LIKE 'mytestdb2';

+------------+------+------------+------------+--------+-------+---------+---------+----------------+
| created_on | name | is_default | is_current | origin | owner | comment | options | retention_time |
|------------+------+------------+------------+--------+-------+---------+---------+----------------|
+------------+------+------------+------------+--------+-------+---------+---------+----------------+

SHOW DATABASES HISTORY LIKE 'mytestdb2';

+---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------+
| created_on                      | name      | is_default | is_current | origin | owner  | comment | options | retention_time | dropped_on                      |
|---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------|
| Wed, 25 Feb 2015 16:16:54 -0800 | MYTESTDB2 | N          | N          |        | PUBLIC |         |         |              1 | Fri, 13 May 2016 17:35:09 -0700 |
+---------------------------------+-----------+------------+------------+--------+--------+---------+---------+----------------+---------------------------------+
Copy

备用接口

语言: 中文