PostgreSQL DELETE 语句用法与实例
本文介绍了 PostgreSQL 中的 DELETE 语句的基本形式,以及如何使用 DELETE 语句从数据表中删除行。
在 PostgreSQL 中,DELETE 语句用于从表中删除符合指定条件的行或者所有行。
PostgreSQL DELETE 语法
要从 PostgreSQL 数据库中的表中删除行,请按照如下的语法形式使用 DELETE 语句。
DELETE FROM table_name
[where_clause]
[RETURNING expr];
这里:
-
在
DELETE FROM关键字后的table_name是要从中删除数据的表的名称。 -
where_clause是WHERE子句。 您可以在其中使用条件来指定要删除表中的哪些行。 -
WHERE子句是可选的。如果不指定WHERE子句,表中的所有行将被删除。 -
RETURNING子句是可选的。它用于返回删除的行的信息。expr可以是列名或者表达式,多个列或者表达式请使用逗号分隔。 您还可以使用*表示表中的所有的列。如果不指定
RETURNING子句,DELETE语句将返回删除的行数。
如果您要更加高效率的清空一个表,请优先使用 TRUNCATE TABLE 语句。
PostgreSQL DELETE 语句示例
我们将使用 Sakila 示例数据库 中的表进行演示,请您先在 PostgreSQL 中安装 Sakila 示例数据库。
为了防止数据丢失,我们将创建一个表 film_copy,它是 film 表的拷贝。
CREATE TABLE film_copy AS SELECT * FROM film;
film_copy 和 film 有相同的列和行。
使用 PostgreSQL DELETE 从表中删除满足条件的行
要从 film_copy 表中删除 film_id 为 1 的 1 个影片,请使用如下语句:
DELETE FROM film_copy
WHERE film_id = 1;
DELETE 1
该语句返回 1 表示已经删除了 1 行。
要从 film_copy 表中删除 film_id 为 2, 3 或者 4 的 3 个影片,请使用如下语句:
DELETE FROM film_copy
WHERE film_id in (2, 3, 4);
DELETE 3
该语句返回 3 表示已经删除了 3 行。
使用 PostgreSQL DELETE 删除并返回删除的行
要从 film_copy 表中删除 film_id 为 10 或者 11 的 2 个影片,并返回删除的影片的标题,请使用如下语句:
DELETE FROM film_copy
WHERE film_id in (10, 11)
RETURNING film_id, title;
film_id | title
---------+------------------
10 | ALADDIN CALENDAR
11 | ALAMO VIDEOTAPE
(2 rows)这里, DELETE 删除了 2 行,并返回了删除的 2 行的中的部分列。
使用 PostgreSQL DELETE 从表中删除所有行
要从 film_copy 表中删除所有的影片, 请使用如下语句:
DELETE FROM film_copy;
结论
PostgreSQL DELETE 语句用来从一个表中删除一个或多个行。 如果不带有 WHERE 子句, 则删除所有的行。 如果带有 RETURNING 子句, DELETE 语句将返回删除的行的信息,否则它返回删除的行数。