6.2. 更新数据

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

要更新现有行,请使用UPDATE命令。这需要三项信息:

  • 要更新的表和列的名称

  • 列的新值

  • 要更新的行

Chapter 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条件不必是相等性测试。还有许多其他运算符可用(请参阅Chapter 9)。但是表达式需要计算为布尔结果。

您可以通过在SET子句中列出多个分配来更新UPDATE命令中的多个列。例如:

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