PostgreSQL 删除


PostgreSQL 删除

在本节中,我们将学习如何使用 PostgreSQL 中的 Delete 命令从特定表中删除数据。

DELETE 命令用于从表中删除所有现有记录。而WHERE子句来删除选定的记录,否则,所有的数据将被消除。

注意:TRUNCATE 命令提供了一种更快的技术来删除表中的所有行。

句法

DELETE 命令的基本语法如下:

DELETE FROM table_name    
WHERE [condition];

上述语法中使用了以下参数

参数 描述
表名 它用于在 DELETE FROM 子句中定义我们要从中删除数据的表。
Where clause WHERE 子句用于描述应删除哪些记录。如果我们忽略 WHERE 子句,表中的所有记录都将被删除。它是一个可选参数。

DELETE命令返回移除的行数。如果没有删除行,删除命令将返回。有时它可能与 WHERE 子句中的条件标识的行数不同,因为该表可能有一个 BEFORE DELETE 触发器。使用该命令删除表中的记录时应谨慎。

万一,我们需要验证引用另一个表中一个或多个列的条件,为此,我们可以使用如下的USING 子句

DELETE FROM table  
USING another_table  
WHERE table.id = another_table.id AND

如果我们不需要使用USING 子句,我们可以使用子查询,如下面的命令所示:

DELETE FROM table  
WHERE table.id = (SELECT id FROM another_table);

PostgreSQL 删除命令示例

在这里,我们将采用在PostgreSQL教程PostgreSQL 插入命令部分中创建的部门和部门**tmp 表。

下面的命令将帮助我们显示部门表的记录:

  1. SELECT * FROM 部门;

PostgreSQL 删除

带有 WHERE 子句的 PostgreSQL DELETE 示例

以下命令用于删除dept_id列中值为 6 的行:

DELETE FROM department  
WHERE dept_id = 6;

PostgreSQL 删除

执行上述命令后,它将返回一条消息DELETE 1,这意味着已从部门表中删除了一行。

注意:如果我们不使用 WHERE 子句,整个记录将被删除。

如果部门表没有任何带有dept_id 7 的行,则 DELETE 命令确实有效,并返回为DELETE 0

例如

PostgreSQL 删除

PostgreSQL DELETE USING 命令示例

如果我们要删除所有行部门的表是有值的dept_id列中department_tmp表,我们需要遵循以下流程:

步骤1

首先,我们将借助以下命令查看department_tmp表数据:

SELECT  * FROM department_tmp;

执行上述命令后,我们将看到department_tmp的表结构。

PostgreSQL 删除

第2步

然后,我们将使用下面的删除命令在USING条件的帮助下删除部门表中的行:

DELETE FROM department   
USING department_tmp  
WHERE  
department.dept_id = department_tmp.dept_id;

Step3

最后,我们将查询部门表以检查删除操作是否正常。

PostgreSQL 删除表中的所有行

在这种情况下,我们不使用以下 DELETE 命令中的 WHERE 条件来删除部门表中的所有行:

DELETE FROM department;

正如我们在下图中看到的,部门表现在是空的。

PostgreSQL 删除

之后,我们将使用DELETE命令的返回条件删除department_tmp表中的所有行并返回删除的行:

DELETE FROM department_tmp   
RETURNING *;

PostgreSQL 删除