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
语句将返回删除的行的信息,否则它返回删除的行数。