## 6.2.更新数据 [](<>)[](<>) 对数据库中已有数据的修改称为更新。可以更新单个行、表中的所有行或所有行的子集。每一列都可以单独更新;其他列不受影响。 要更新现有行,请使用[使现代化](sql-update.html)命令这需要三条信息: 1. 要更新的表和列的名称 2. 列的新值 3. 要更新的行 召回[第五章](ddl.html)该SQL通常不会为行提供唯一标识符。因此,并不总是可以直接指定要更新的行。而是指定行必须满足哪些条件才能更新。只有当表中有主键(与是否声明主键无关)时,才能通过选择与主键匹配的条件来可靠地寻址各个行。图形数据库访问工具依赖于这一事实,允许您单独更新行。 例如,此命令将所有价格为5的产品更新为价格为10的产品: ``` UPDATE products SET price = 10 WHERE price = 5; ``` 这可能会导致更新零行、一行或多行。尝试不匹配任何行的更新不是错误。 让我们详细了解一下该命令。首先是关键词`使现代化`后跟表名。通常,表名可以是模式限定的,否则会在路径中查找。接下来是关键词`设置`后跟列名、等号和新列值。新列值可以是任何标量表达式,而不仅仅是常量。例如,如果你想将所有产品的价格提高10%,你可以使用: ``` UPDATE products SET price = price * 1.10; ``` 如您所见,新值的表达式可以引用行中的现有值。我们还漏掉了`哪里`条款如果省略,则表示表中的所有行都将更新。如果存在,则仅匹配`哪里`条件已更新。请注意,表中的等号`设置`子句是一个赋值,而`哪里`子句是一种比较,但这不会产生任何歧义。当然了`哪里`条件不一定是平等测试。还有许多其他运营商(参见[第九章](functions.html)).但表达式需要计算为布尔结果。 可以在一个数据库中更新多个列`使现代化`命令中列出多个赋值`设置`条款例如: ``` UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0; ```