Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

6.2. 更新数据 #

将数据库中的数据进行修改称为更新。您可以更新各行、表中的所有行或者所有行的一个子集。每一列都可以单独更新,而不会对其他列产生影响。

要更新现有行,请使用 UPDATE 命令。此命令需要三个信息

  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 子句中的等号是比较,但这不会产生任何歧义。当然,WHERE 条件不必是等值测试。可以使用许多其他运算符(请参见 第 9 章)。但表达式需要计算出布尔结果。

你可以在 UPDATE 命令中通过在 SET 子句中列出多个赋值来更新多列。例如

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