如何在PostgreSQL中删除一个特定的行?

1,397 阅读5分钟

每当我们谈到任何网站或应用程序的数据存储时,我们就会想到postgresql。这个数据库同时支持JSON和SQL查询。Postgresql是可定制的,你可以添加许多你认为postgresql中没有的服务和插件,而你的项目需要它们。如果你想选择要删除的特定行,postgresql允许你使用具有删除语句的 "where "命令。我们在这里也引用了psql和pgAdmin中的一系列例子。

语法

DELETE FROM table-name WHERE condition;

条件可以是与任何指定的列有关,也可以是与另一个表有关。

例1

要从表中删除数据,你必须有一个已经创建的表。在文章的后面,我们已经讨论了在各自的例子中创建和插入表的方法。总之,现在考虑一个例子,我们创建了一个名为软件的假表。它包含了软件的所有属性。为了显示该表的值,你需要一个带有 "*"的选择命令。这个符号意味着所有的数据。

>> select * from software;

由于显示的是表中的总行数为6,我们将用一个约束条件删除一条行。当我们在查询中提到 "where "之后,有6个数字的id将被删除。这个关键字用于在表中的特定行上应用条件。现在应用这个查询。

>> Delete from software where id=6;

这个执行将显示,根据查询中给定的id,从表中删除了一条记录。为了检查删除后的表的位置,我们将再次使用选择查询。所有的行都被显示出来,除了被删除的那条。

例2

在走向一些困难的概念之前。下面是一些创建表,插入值,然后应用有两个条件的删除命令的示例情况。创建了名为 "sample1 "的表。每一列的名称都有它要用来接收数值的数据类型。让我们看看它是如何工作的。

>> create table sample1 (“id” int, “name” char(10), “age” int);


该表将被创建。之后,我们需要通过插入命令向表添加数据。这个命令一次包含所有的值。你也可以使用单独的命令来输入数据。在前面的例子中,我们用一个条件删除了一条记录,但where子句包含两个条件。指定了id为6,年龄为23的那一行。

>> delete from sample1 where id=6 AND age= 23;

从结果来看,你可以注意到有一条记录被删除了,其余的都是通过使用select语句显示的。

例3

你一定很熟悉这两个表之间的关系。如果不熟悉!那么这个例子将使你对两个表在一个查询中的使用概念升级。你将看到 "EXISTS "语句的参与。这个语句使删除命令更加复杂。有时你会遇到这样的情况,你需要根据另一个表来删除一个表中的记录。你会知道,"FROM "子句不足以达到这个目的。

这个例子涉及到在删除记录时两个表的使用。一个是拥有软件信息的 "软件"。而另一个是 "系统",包含系统的ID和名称。两个表的数据都是通过选择语句显示的。


现在我们将对表 "软件 "应用删除命令,因为将从表 "软件 "中删除一条关于表 "系统 "的记录。

>>DELETE FROM software where exists (select 1 from system where system.id = software.id AND system.name = software.name );


该命令的第一个位置是针对 "软件 "表的,是要从软件中删除一行。而在 "existence "部分之后,是针对表 "software "的。这个查询要求系统获取一条记录,其中两个表的IDS是相同的,有一个共同的名字。现在回到表,你会发现在软件表和系统表中,有两行具有相同的ID。现在又有一个约束,即名称的约束。对于相同的id,存在着两个值。所以系统会将名字与 "系统 "表中的名字相匹配。当我们执行这个命令时,显示有两条记录被删除。

如果我们想检查留在两个表中的数据,通过选择语句进行检查。你可以看到 "软件 "表中的记录被删除了,而 "系统 "表中的记录却完好无损。这意味着'系统'表只用于参考。

例4

每当我们从表中删除任何数据时,只显示被删除的行数,而不显示该行本身。所以要预览具体的行,有一个简单的方法。我们只需在命令的末尾使用 "返回 "关键字和 "*"。考虑一下前面描述的表,"系统"。让我们看看工作情况。

>> delete from system where id = 9 Returning *;

你可以看到,有9个id的行被删除,并显示为查询的结果。同样地,我们还有一个例子,其中选择了两行。这些行被写在一个括号内的单一命令中。语法有点不同,因为它涉及到在命令中添加 "IN"。这条命令写成这样。

>>Delete from system where id IN(2,3) Returning *;

结果将显示为两个id。

例5

前面我们谈到了从表中删除一条特定的记录。但如果你想删除整个名为sample1的表,那么我们可以使用下面的方法。

>> delete from sample1

另一种删除表的方法是用 "drop "这个词和表名一起使用。

通过pgAdmin

postgresql的仪表板是 "pgAdmin"。我们也可以在pgAdmin中应用同样的查询。在提供密码后,导航到左边的导航栏,选择数据库名称,然后进入 "查询工具"。在这里你可以写查询。通过选择命令显示假表'sample'的数据。

页面的输出部分显示结果。

你可以简单地进入脚本选项,选择 "删除脚本",而不是写整个查询,这将自动显示删除查询。你只需要在这里添加id。

这将显示命令被执行的信息,执行时间也会显示在这里。

同样的,你也可以为同一个表添加选择命令。

总结

本教程结合了简单而全面的例子,展示了从表中删除一条记录的查询。Postgresql允许用户在 "where "和 "AND "条件的帮助下,从多条记录中删除数据。