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;
| name | approx_birthyear |
|---|---|
| Kat | 1993 |
语法
TRUNCATE 语句
TRUNCATE 语句会删除表中的所有行,可视为不带 WHERE 子句的 DELETE FROM 别名:
TRUNCATE tbl;
回收内存与磁盘空间的限制
执行 DELETE 并不意味着会立即回收空间。通常情况下,行只会被标记为已删除。Goose 会在执行 CHECKPOINT时回收空间。VACUUM 目前不会回收空间。