PostgreSQL DELETE 语句用法与实例

本文介绍了 PostgreSQL 中的 DELETE 语句的基本形式,以及如何使用 DELETE 语句从数据表中删除行。

在 PostgreSQL 中,DELETE 语句用于从表中删除符合指定条件的行或者所有行。

PostgreSQL DELETE 语法

要从 PostgreSQL 数据库中的表中删除行,请按照如下的语法形式使用 DELETE 语句。

DELETE FROM table_name
[where_clause]
[RETURNING expr];

这里:

  • DELETE FROM 关键字后的 table_name 是要从中删除数据的表的名称。

  • where_clauseWHERE 子句。 您可以在其中使用条件来指定要删除表中的哪些行。

  • 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_copyfilm 有相同的列和行。

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