dml-update.md 2.1 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
## 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;
```