↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

6.2. 更新数据 #

对数据库中已有数据的修改称为更新。你可以更新单独的行、表中 的所有行或所有行的一个子集。每一列都可以单独更新;其他列 不受影响。

要执行一次更新,你需要三条信息:

  1. 要更新的表和列的名称,

  2. 列的新值,

  3. 要更新哪些行。

回想第 5 章中所说的,SQL 一般不为行提供唯一的 标识符。因此不一定能直接指定要更新哪一行。相反,你指定的 是行必须满足什么条件才会被更新。只有当表中有主键时(无论 你是否声明了它),你才能通过选择一个与主键匹配的条件来 可靠地定位单独的行。图形化的数据库访问工具正是依靠这一点 来让你逐行更新的。

例如,这条命令把所有价格为 5 的产品的价格更新为 10:

UPDATE products SET price = 10 WHERE price = 5;

这可能导致零行、一行或多行被更新。尝试一次不匹配任何行的 更新并不是错误。

让我们详细看看这条命令:首先是关键字UPDATE, 后跟表名。与通常一样,表名可以是模式限定的,否则将在路径中 查找。接下来是关键字SET,后跟列名、一个 等号和列的新值。新的列值可以是任何标量表达式,而不仅仅是 常量。例如,如果你想把所有产品的价格提高 10%,可以使用:

UPDATE products SET price = price * 1.10;

如你所见,新值的表达式也可以引用旧值。我们还省略了 WHERE子句。如果省略它,就意味着表中的 所有行都被更新。如果给出它,则只有满足WHERE 之后条件的那些行被更新。注意,SET子句中 的等号是赋值,而WHERE子句中的等号是比较, 但这不会产生任何歧义。当然,条件不必是相等测试。还有许多 其他操作符可用(见第 9 章)。但表达式 必须求值为布尔结果。

你也可以在一条UPDATE命令中更新多列,方法 是在SET子句中列出多个赋值。例如:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。