📅  最后修改于: 2020-11-30 08:41:33             🧑  作者: Mango
在本节中,我们将学习如何使用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教程的PostgreSQL插入命令部分中创建的department和department_tmp表。
以下命令将帮助我们显示部门表的记录:
SELECT * FROM department;
以下命令用于删除在dept_id列中值为6的行:
DELETE FROM department
WHERE dept_id = 6;
执行完上述命令后,它将返回一条带有DELETE 1的消息,这表明已从部门表中删除了一行。
注意:如果我们不使用WHERE子句,则会删除整个记录。
而且,如果部门表不包含任何带有dept_id 7的行,则DELETE命令起作用,并返回DELETE 0 。
例如
如果我们要删除那些在该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;
第三步
最后,我们将查询部门表以检查删除操作是否正常。
在这种情况下,我们不会在下面的DELETE命令中使用WHERE条件从部门表中删除所有行:
DELETE FROM department;
如下图所示,部门表现在为空。
之后,我们将使用DELETE命令的返回条件来删除department_tmp表中的所有行并返回删除的行:
DELETE FROM department_tmp
RETURNING *;