域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

删除数据

本章将讨论如何使用 DELETE 语句删除 PostgreSQL 数据,以及配合 RETURNING 子句在删除数据的同时,返回已删除的内容。最后,还将介绍 DELETE JOIN:根据另一张表中的数据进行删除。

DELETE

DELETE FROM 表名
WHERE 条件
[RETURNING <字段列表 | *>]

如果没有通过 WHERE 指定条件,将删除所有数据

示例

示例数据:

删除ID为8的记录

DELETE FROM links
WHERE id = 8;

删除ID为7的记录,并返回删除的数据:

DELETE FROM links
WHERE id = 7
RETURNING *;

DELETE JOIN

DELETE FROM 表名
USING 表达式
WHERE 条件
[RETURNING <字段列表 | *>]

示例

示例数据:

DROP TABLE IF EXISTS contacts;
CREATE TABLE contacts(
   contact_id serial PRIMARY KEY,
   first_name varchar(50) NOT NULL,
   last_name varchar(50) NOT NULL,
   phone varchar(15) NOT NULL
);


DROP TABLE IF EXISTS blacklist;
CREATE TABLE blacklist(
    phone varchar(15) PRIMARY KEY
);


INSERT INTO contacts(first_name, last_name, phone)
VALUES ('John','Doe','(408)-523-9874'),
       ('Jane','Doe','(408)-511-9876'),
       ('Lily','Bush','(408)-124-9221');


INSERT INTO blacklist(phone)
VALUES ('(408)-523-9874'),
       ('(408)-511-9876');

删除存在于黑名单的联系人

DELETE FROM contacts 
USING blacklist
WHERE contacts.phone = blacklist.phone;

可以使用子查询实现以上功能:

要查看完整内容,请先登录