Postgresql 中文操作指南
6.2. Updating Data #
对已经位于数据库中的数据的修改称为更新。可以更新单个行、表中的所有行或所有行的子集。每列都可以单独更新;其他列不受影响。
使用 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;