修改数据库中已有的数据称为更新。你可以更新单独的行、表中的所有行,或者所有行中的一个子集。每一列都可以单独更新;其他列不受影响。
要更新现有的行,可使用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)。不过,该表达式必须计算出一个布尔结果。
你可以在一条UPDATE命令中更新多个列,只需在 SET子句中列出多个赋值。例如:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。