# 6.2.更新数据

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

要更新现有行,请使用使现代化命令这需要三条信息:

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

  2. 列的新值

  3. 要更新的行

    召回第五章该SQL通常不会为行提供唯一标识符。因此,并不总是可以直接指定要更新的行。而是指定行必须满足哪些条件才能更新。只有当表中有主键(与是否声明主键无关)时,才能通过选择与主键匹配的条件来可靠地寻址各个行。图形数据库访问工具依赖于这一事实,允许您单独更新行。

    例如,此命令将所有价格为5的产品更新为价格为10的产品:

UPDATE products SET price = 10 WHERE price = 5;

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

让我们详细了解一下该命令。首先是关键词使现代化后跟表名。通常,表名可以是模式限定的,否则会在路径中查找。接下来是关键词设置后跟列名、等号和新列值。新列值可以是任何标量表达式,而不仅仅是常量。例如,如果你想将所有产品的价格提高10%,你可以使用:

UPDATE products SET price = price * 1.10;

如您所见,新值的表达式可以引用行中的现有值。我们还漏掉了哪里条款如果省略,则表示表中的所有行都将更新。如果存在,则仅匹配哪里条件已更新。请注意,表中的等号设置子句是一个赋值,而哪里子句是一种比较,但这不会产生任何歧义。当然了哪里条件不一定是平等测试。还有许多其他运营商(参见第九章).但表达式需要计算为布尔结果。

可以在一个数据库中更新多个列使现代化命令中列出多个赋值设置条款例如:

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