↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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.3 已结束支持。 请参阅 当前版本手册.

3.2. 更新数据 #

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

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

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

  2. 列的新值,

  3. 要更新哪些行。

回想第 2 章中所说的,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子句中的等号是比较,但这不会产生任何歧义。当然,条件不必是相等测试。还有许多其他操作符可用(见第 6 章)。但表达式必须求值为布尔结果。

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

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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.