在 PostgreSQL 中,使用 DELETE 语句删除表中的一行或多行。 它只删除表中的数据,而不删除表结构。

DELETE FROM <table_name>
[WHERE <condition<]
RETURNING * | <output_expression< AS <output_name<; 

在上面的语法中,

  • 在 DELETE FROM 关键字后指定要删除其中数据的表的名称。
  • WHERE 子句是可选的,它限制特定于指定条件的删除操作。如果不指定WHERE子句,Postgres将删除表中的所有行。
  • RETURNING 子句是可选的,它将返回所有已删除行或指定列的值的列表。
  • DELETE 语句成功执行后,PostgreSQL 将给出 DELETE count 消息,其中 count 是 DELETE 语句删除的行数。

    考虑以下 employee 表:

    现在,让我们从 emp_id = 5 的员工表中删除数据。

    DELETE FROM employee
    WHERE emp_id = 5; 

    上述查询将在 pgAdmin 中显示以下结果:

    PostgreSQL 删除数据

    上面的输出 DELETE 1 显示从 employee 表中删除了 1 行。

    DELETE 语句可以从employee 表中删除多条记录。例如,现在我们将删除 emp_id = 3 和 4 的行,并在执行 DELETE 语句后返回删除的行。

    DELETE FROM employee
    WHERE emp_id IN (3, 4); 

    上述查询将在 pgAdmin 中显示以下结果:

    PostgreSQL 删除数据

    DELETE 2 表示已从表中删除 2 行。

    DELETE 语句的 RETURNING 子句

    RETURNING 子句返回删除的行或列值。如果您指定RETURNING *,那么它将返回所有已删除的行,如果您指定RETURNING column_name,那么它将返回指定列的值。您可以指定用逗号分隔的多个列。

    以下 DELETE 语句返回所有已删除的行:

    DELETE FROM employee
    WHERE emp_id = 2
    RETURNING *; 

    PostgreSQL 删除数据

    以下 DELETE 语句返回已删除行的指定列:

    DELETE FROM employee
    WHERE emp_id IN (5, 7)
    RETURNING emp_id, first_name, last_name; 

    PostgreSQL 删除数据

    删除表中的所有数据

    如果省略 WHERE 子句,DELETE 语句可用于删除表中的所有行,如下所示。

    DELETE FROM employee; 

    上面已经删除了 employee 表中的所有行。让我们通过运行 SELECT 查询来验证它。

    PostgreSQL 删除数据