⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
DROP 语句

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

示例

删除名为 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;

语法

被删除对象的依赖关系

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

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