⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
DROP 语句

DROP 语句用于移除先前通过 CREATE 命令添加的目录条目。

示例

删除名为 tbl 的表

DROP TABLE tbl;

删除名为 view1 的视图;如果视图不存在,则不抛出错误

DROP VIEW IF EXISTS view1;

删除函数 fn

DROP FUNCTION fn;

删除索引 idx

DROP INDEX idx;

删除架构(schema) sch

DROP SCHEMA sch;

删除序列 seq

DROP SEQUENCE seq;

删除宏 mcr

DROP MACRO mcr;

删除宏表 mt

DROP MACRO TABLE mt; -- the `TABLE` is optional since v1.4.0

删除类型 typ

DROP TYPE typ;

语法

已删除对象的依赖项

DuckDB 对某些对象类型执行有限的依赖跟踪。默认情况下,或者如果提供了 RESTRICT 子句,如果有任何其他对象依赖于该条目,则该条目将不会被删除。如果提供了 CASCADE 子句,则所有依赖于该对象的对象也将被一并删除。

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema;
Dependency Error:
Cannot drop entry "myschema" because there are entries that depend on it.
table "t1" depends on schema "myschema".
Use DROP...CASCADE to drop all dependents.

CASCADE 修饰符会同时删除 myschema 和 myschema.t1

CREATE SCHEMA myschema;
CREATE TABLE myschema.t1 (i INTEGER);
DROP SCHEMA myschema CASCADE;

以下依赖关系会受到跟踪,因此如果用户尝试在没有 CASCADE 修饰符的情况下删除被依赖对象,系统将抛出错误。

依赖对象类型 被依赖对象类型
架构 (SCHEMA) 函数 (FUNCTION)
架构 (SCHEMA) 索引 (INDEX)
架构 (SCHEMA) 宏表 (MACRO TABLE)
架构 (SCHEMA) 宏 (MACRO)
架构 (SCHEMA) 架构 (SCHEMA)
架构 (SCHEMA) 序列 (SEQUENCE)
架构 (SCHEMA) 表 (TABLE)
架构 (SCHEMA) 类型 (TYPE)
架构 (SCHEMA) 视图 (VIEW)
表 (TABLE) 索引 (INDEX)

限制

关于视图的依赖项

目前,视图的依赖关系不会被跟踪。例如,如果创建了一个引用表的视图,随后该表被删除,则视图将处于无效状态

CREATE TABLE tbl (i INTEGER);
CREATE VIEW view1 AS
    SELECT i FROM tbl;
DROP TABLE tbl RESTRICT;
SELECT * FROM view1;

这将返回以下错误消息

Catalog Error:
Table with name tbl does not exist!

回收磁盘空间的限制

运行 DROP TABLE 应该会释放表所使用的内存,但不一定会释放磁盘空间。即使磁盘空间没有减少,空闲块也会被标记为 free(空闲)。例如,如果我们有一个 2 GB 的文件并删除了一个 1 GB 的表,文件大小可能仍为 2 GB,但其中应包含 1 GB 的空闲块。要检查这一点,请使用以下 PRAGMA 并查看输出中的 free_blocks 数量

PRAGMA database_size;

有关删除表后回收空间的说明,请参阅“回收空间 (Reclaiming space)”页面

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南