九月 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 语句示例
让我们设置一个示例表来进行演示。
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;
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 返回以下已删除的行:
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
子句返回已删除的行。