Skip to content

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;