将数据库中的数据进行修改称为更新。您可以更新各行、表中的所有行或者所有行的一个子集。每一列都可以单独更新,而不会对其他列产生影响。
要更新现有行,请使用 UPDATE 命令。此命令需要三个信息
要更新的表名和列名
列的新值
要更新的行
回忆 第 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
条件不必是等值测试。可以使用许多其他运算符(请参见 第 9 章)。但表达式需要计算出布尔结果。
你可以在 UPDATE
命令中通过在 SET
子句中列出多个赋值来更新多列。例如
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;