此操作会执行以下物理操作:
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;