3.3 通过UPDATE语句更改现有的数据
像大多数其他SQL语句一样,UPDATE语句的作用就如它听上去那样——更新现有的数据。虽然看起来很相似,但它的结构与SELECT有些许不同。来看UPDATE的语法:
UPDATE <表名>
SET <列> = <值> [,<列> = <值>]
[FROM <一个或多个源表>]
[WHERE <约束条件>]
UPDATE语句可以从多个表中生成,但只影响一个表。这是什么意思呢?这是说,我们能够从任意数量的不同表中构建条件或获取数据值(通过联结)。但是,一次只能有一个表是更新操作的目标对象。现在,来看一个简单的更新。
我们就从老朋友Jo Brown开始吧(希望你还记得在本章的前面讨论联结时提及过她)。最近Jo Brown似乎结婚了,我们需要确认她的数据是正确的。下面运行一个查询以查看一行数据:


查询返回的结果如下:

下面,将MaritalStatus值更新为更准确的“M”:

像运行INSERT语句一样,不会从SQL Server中得到太多的结果信息:
![]()
现在,再运行一次SELECT语句,将看到值确实发生了改变:

注意,可以修改不止一列,只需添加一个逗号,再加上另一个列的表达式即可。例如,下面的语句在修改婚姻状况的同时还提升了Jo的职位:

如果愿意,也可以在SET子句中使用表达式,而不是像前面那样使用显式的值。例如,假设想要给Jo增加20%的休假时间(毕竟,她刚获得了提升!),可以使用如下的语句:

可以看出,一条UPDATE语句就相当的强大。即便如此,这还只是开始。在后面的章节中,将看到更高级的更新。
虽然SQL Server允许更新几乎所有的列(有少数列不能更新,如时间戳),但是,在主键列的更新上要特别小心。更新主键列很容易导致“孤立”其他的数据(该数据到正在修改的数据上有一个引用)。






