📜  PostgreSQL删除

📅  最后修改于: 2020-11-30 08:41:33             🧑  作者: Mango

PostgreSQL删除

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

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

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

句法

DELETE命令的基本语法如下:

DELETE FROM table_name  
WHERE [condition];  

上面的语法中使用以下参数:

Parameters Description
table_name It is used to define the table from which we want to delete data in the DELETE FROM clause.
Where clause The WHERE clause is used to describe which record(s) should be deleted. If we ignore the WHERE clause, all records in the table will be deleted. It is an elective parameter.

DELETE命令返回已删除的行数。如果没有删除任何行,则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 Delete命令示例

在这里,我们将使用在PostgreSQL教程PostgreSQL插入命令部分中创建的department和department_tmp表。

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

SELECT * FROM department;

具有WHERE子句的PostgreSQL DELETE示例

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

DELETE FROM department
WHERE dept_id = 6;

执行完上述命令后,它将返回一条带有DELETE 1的消息,这表明已从部门表中删除了一行。

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

而且,如果部门表不包含任何带有dept_id 7的行,则DELETE命令起作用,并返回DELETE 0

例如

PostgreSQL DELETE USING命令的示例

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

步骤1

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

SELECT  * FROM department_tmp;

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

第2步

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

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

第三步

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

PostgreSQL从表中删除所有行

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

DELETE FROM department;

如下图所示,部门表现在为空。

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

DELETE FROM department_tmp 
RETURNING *;