DROP DATABASE(或 DROP SCHEMA)语句用于将一个数据库从系统中永久删除。此操作会执行以下物理操作:
1. 移除元数据: 从元存储(Metastore)中移除数据库的所有元数据信息。
2. 删除数据: 物理删除与该数据库关联的目录以及其中存储的内部表数据文件。
语法
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT | CASCADE];
语法说明
关键字 | 说明 |
IF EXISTS | 可选。如果指定的数据库不存在,则避免抛出错误。 |
database_name | 必需。 要删除的数据库名称。 |
RESTRICT | 默认行为。 强制要求数据库在删除前必须为空。如果数据库包含任何对象(表、视图等),操作将失败。 |
CASCADE | 强制删除数据库中的所有对象(表、视图等),然后删除数据库本身。推荐用于快速清理。 |
使用说明
默认行为 (RESTRICT)
默认情况下,数据库必须是空的才能被删除,以防止意外数据丢失。
手动清理要求: 如果不使用
CASCADE,您必须手动删除或移动数据库中的所有对象:使用
SHOW TABLES 定位所有对象,然后使用 DROP TABLE 和 DROP VIEW 删除它们。如需保留某些对象,可使用
ALTER TABLE 或 ALTER VIEW 将它们移动到另一个数据库。级联删除 (CASCADE)
使用
CASCADE 子句时,TCHouse-X 会自动删除数据库中的所有表和对象。注意外部表:
CASCADE 导致的自动删除遵循标准的 DROP TABLE 和 DROP VIEW 规则。特别是,任何外部表的目录和底层数据文件在删除时会被保留。当前数据库限制
您不能删除当前会话正在使用的数据库。
操作要求: 在执行
DROP DATABASE 之前,必须先使用 USE 语句切换到另一个数据库。便捷切换: 始终可用的
default 数据库是退出当前数据库并执行删除操作的便捷目标,即执行 USE default;。示例
-- 准备工作:创建并填充两个示例数据库CREATE DATABASE temp_to_drop;USE temp_to_drop;CREATE TABLE t1 (x int);CREATE TABLE t2 (s string);USE default; -- 切换到 default 数据库,以便执行删除 temp_to_drop 的操作-- 1. 尝试使用默认行为 (RESTRICT) 删除一个非空数据库(操作会失败)DROP DATABASE temp_to_drop;-- 错误示例:ERROR: InvalidOperationException: Database temp_to_drop is not empty, One or more tables exist.-- 2. 推荐方法:使用 CASCADE(级联)关键字强制删除数据库及其所有内部对象DROP DATABASE temp_to_drop CASCADE;-- 成功删除数据库及其内部的表 t1 和 t2。-- 3. 传统或谨慎的方法(手动清理)CREATE DATABASE another_temp;USE another_temp;CREATE TABLE t3 (y int);USE default;-- 步骤 3a:手动删除该数据库中的所有表DROP TABLE another_temp.t3;-- 步骤 3b:删除此时已经为空的数据库DROP DATABASE another_temp;