跳到主要内容

DELETE 语句

DELETE 语句用于从由 table-name 指定的表中删除行。 如果不存在 WHERE 子句,则会删除表中的所有记录。 如果提供了 WHERE 子句,则仅删除 WHERE 子句结果为 true 的行。表达式为 false 或 NULL 的行会被保留。

示例

从数据库中删除满足条件 i = 2 的行:

DELETE FROM tbl WHERE i = 2;

删除表 tbl 中的所有行:

DELETE FROM tbl;

USING 子句

USING 子句允许基于其他表或子查询的内容执行删除。

RETURNING 子句

RETURNING 子句允许返回已删除的值。它使用与 SELECT 子句相同的语法,但不支持 DISTINCT 修饰符。

CREATE TABLE employees (name VARCHAR, age INTEGER);
INSERT INTO employees VALUES ('Kat', 32);
DELETE FROM employees RETURNING name, 2025 - age AS approx_birthyear;
nameapprox_birthyear
Kat1993

语法

TRUNCATE 语句

TRUNCATE 语句会删除表中的所有行,可视为不带 WHERE 子句的 DELETE FROM 别名:

TRUNCATE tbl;

回收内存与磁盘空间的限制

执行 DELETE 并不意味着会立即回收空间。通常情况下,行只会被标记为已删除。Goose 会在执行 CHECKPOINT时回收空间。VACUUM 目前不会回收空间。