PostgreSQL 教程: DELETE

九月 6, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的DELETE语句从表中删除数据。

PostgreSQL DELETE 语句简介

PostgreSQL 的DELETE语句允许您从表中删除一行或多行。

下面显示了DELETE语句的基本语法:

DELETE FROM table_name
WHERE condition;

在这个语法中:

  • 首先,在DELETE FROM关键字后指定要从中删除数据的表的名称。
  • 其次,在WHERE子句中使用条件来指定要从表中删除哪些行。

WHERE子句是可选的。如果省略WHERE子句,DELETE语句将删除表中的所有行。

DELETE语句返回删除的行数。如果DELETE语句未删除任何行,则返回零。

要将删除的行返回给客户端,请使用RETURNING子句,如下:

DELETE FROM table_name
WHERE condition
RETURNING (select_list | *)

星号 (*) 允许您从table_name中返回已删除行的所有列。

要返回特定列,请在RETURNING关键字后指定它们。

请注意,DELETE语句仅从表中删除数据。它不会修改表的结构。如果要更改表的结构(例如删除列),则应该使用ALTER TABLE语句。

PostgreSQL DELETE 语句示例

让我们设置一个示例表来进行演示。

以下语句创建一个新表,名为links,并插入一些示例数据

DROP TABLE IF EXISTS links;

CREATE TABLE links (
    id serial PRIMARY KEY,
    url varchar(255) NOT NULL,
    name varchar(255) NOT NULL,
    description varchar(255),
    rel varchar(10),
    last_update date DEFAULT now()
);

INSERT INTO  
   links 
VALUES 
   ('1', 'https://www.rockdata.net/tutorial/', 'PostgreSQL Tutorial', 'Learn PostgreSQL fast and easy', 'follow', '2013-06-02'),
   ('2', 'http://www.oreilly.com', 'O''Reilly Media', 'O''Reilly Media', 'nofollow', '2013-06-02'),
   ('3', 'http://www.google.com', 'Google', 'Google', 'nofollow', '2013-06-02'),
   ('4', 'http://www.yahoo.com', 'Yahoo', 'Yahoo', 'nofollow', '2013-06-02'),
   ('5', 'http://www.bing.com', 'Bing', 'Bing', 'nofollow', '2013-06-02'),
   ('6', 'http://www.facebook.com', 'Facebook', 'Facebook', 'nofollow', '2013-06-01'),
   ('7', 'https://www.tumblr.com/', 'Tumblr', 'Tumblr', 'nofollow', '2013-06-02'),
   ('8', 'http://www.postgresql.org', 'PostgreSQL', 'PostgreSQL', 'nofollow', '2013-06-02');

以下是links表的内容:

SELECT * FROM links;

PostgreSQL DELETE example

1) 使用 DELETE 从表中删除一行

以下语句使用DELETE语句从links表中删除 ID 为 8 的一行:

DELETE FROM links
WHERE id = 8;

该语句返回 1,表示已删除一行:

DELETE 1

以下语句使用DELETE语句删除 ID 为 10 的行:

DELETE FROM links
WHERE id = 10;

由于 ID 为 10 的行不存在,因此该语句返回 0:

DELETE 0

2) 使用 DELETE 删除一行并返回删除的行

以下语句删除 ID 为 7 的行,并将删除的行返回给客户端:

DELETE FROM links
WHERE id = 7
RETURNING *;

PostgreSQL 返回以下已删除的行:

PostgreSQL DELETE with RETURNING example

3) 使用 DELETE 从表中删除多行

以下语句从links表中删除两行并返回已删除行的id列中的值:

DELETE FROM links
WHERE id IN (6,5)
RETURNING *;

输出:

4) 使用 DELETE 删除表中的所有行

以下语句使用不带WHERE子句的DELETE语句删除links表中的所有行:

DELETE FROM links;

现在links表是空的。

概括

  • 使用DELETE FROM语句从表中删除一行或多行。

  • 使用WHERE子句指定要删除的行。

  • 使用RETURNING子句返回已删除的行。