提要:通过本教程,你将学习到如何使用 PostgreSQL 的 UPDATE 语句来更新数据表里已存在的数据。

PostgreSQL UPDATE 语法

使用 UPDATE 语句对数据表中,字段的值进行修改。语法如下:

UPDATE table
SET column1 = value1,
    column2 = value2 ,...
WHERE
 condition;

分析一下语法的细节:

首先,在 UPDATE 之后指定要从哪个表里修改数据

然后,在 SET 部分列出需要修改的字段和值。字段和值之间使用等号。如果要修改多个字段的值,使用英文逗号分隔。没有出现在 SET 部分的其它字段的值不会修改。

最后,通过 WHERE 指定需要修改哪些记录。如果省略了 WHERE,整张表的数据都会被修改。

PostgreSQL UPDATE 示例

我们将通过 PostgreSQL 的 INSERT 创建的 link 表来作演示。

先来看看 link 表里有哪些数据:

SELECT * FROM link;

link表里的数据

PostgreSQL 更新指定数据举例

link 表中,所有 last_update 字段值为 NULL 的记录,修改为当前时间:

UPDATE link
SET last_update = DEFAULT
WHERE
 last_update IS NULL;

修改完之后:

link表里的数据

WHERE 用来过滤 last_update 字段值是 NULL 的记录。之所以能用 DEFAULT 关键字,是因为 last_update 字段接受将当前时间设置为默认值。

PostgreSQL 全表更新示例

要将 link 表里所有 rel 字段的值设置为 nofllow,只需要在 UPDATE 省略 WHERE 子句:

UPDATE link
SET rel = 'nofollow';

link表里的数据

还可以将同一张表里的某个字段的值更新为另一个字段的值。下面的语句用来将 link 表的 name 字段的值拷贝给 description 字段:

UPDATE link
SET description = name;

link表里的数据

PostgreSQL UPDATE JOIN 示例

下面的语句,将使用 link 表里的数据来对 link_tmp 表进行更新:

UPDATE link_tmp
SET rel = link.rel,
 description = link.description,
 last_update = link.last_update
FROM
 link
WHERE
 link_tmp.id = link.id;

PostgreSQL 带 RETURNING 的 UPDATE 示例

默认的,UPDATE 返回受影响的行数。通过 RETURNING 子句,PostgreSQL 还可以在 UPDATE 语句中返回被更新的实体。这是 PostgreSQL 对标准 SQL 的扩展。

下面的语句用来更新 id 为 1 的记录,并返回已更新的实体:

UPDATE link
SET description = '轻松、快速学习PostgreSQL',
 rel = 'follow'
WHERE
 id = 1 
RETURNING id,
 description,
 rel;

UPDATE WITH RETURNING

此时,link 表的数据如下:

link表里的数据

上一篇:PostgreSQL的INSERT