DROP DATABASE 语句

最近更新时间:2026-05-06 16:28:12

我的收藏
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 TABLEDROP VIEW 删除它们。
如需保留某些对象,可使用 ALTER TABLEALTER VIEW 将它们移动到另一个数据库。

级联删除 (CASCADE)

使用 CASCADE 子句时,TCHouse-X 会自动删除数据库中的所有表和对象。
注意外部表: CASCADE 导致的自动删除遵循标准的 DROP TABLEDROP 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;