⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
DROP Statement

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

Examples

删除名为 tbl 的表:

DROP TABLE tbl;

删除名为 v1 的视图;如果视图不存在,不要抛出错误:

DROP VIEW IF EXISTS v1;

删除函数 fn:

DROP FUNCTION fn;

删除索引 idx:

DROP INDEX idx;

删除模式 sch:

DROP SCHEMA sch;

删除序列 seq:

DROP SEQUENCE seq;

删除宏 mcr:

DROP MACRO mcr;

删除宏表 mt:

DROP MACRO TABLE mt;

删除类型 typ:

DROP TYPE typ;

Syntax

被删除对象的依赖关系

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.
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

Limitations

视图依赖

目前,视图的依赖关系没有被跟踪。例如,如果创建了一个引用表的视图,并且该表被删除,那么视图将处于无效状态:

CREATE TABLE tbl (i INTEGER);
CREATE VIEW v AS
    SELECT i FROM tbl;
DROP TABLE tbl RESTRICT;
SELECT * FROM v;
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;

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