29人参与 • 2025-08-16 • MsSqlserver
在实际工作中,我们经常需要更改数据库中的数据,更新数据用到的关键词是update,其基本语法是:
update 表名 set 列名1 = 新值1, 列名2 = 新值2, ... where 条件;
其中update 后面指定要更新数据的表,再用set设置需要更新的列及其新值,可以同时更新多个列,用逗号分隔,where后面则加条件指定哪些行的数据需要被更新。例如,有如下一张student表:
现在需要将小明的班级更新为301,同时他的年龄应该是21岁,那么可以写成:
update dbo.student set class = '301', age = 21 where name = '小明';
如果省略了where 子句,即不加任何限定条件,那么表中所有行的数据都会被更新(即所有学生的class都成了301,age都是21了),这在大多数情况下不是我们想要的结果,因此使用时需格外注意。在实际工作中,强烈建议大家在执行update之前,先将指定的条件用select语句查一遍,确保要更新的数据是对的。记得我刚开始工作的时候,害怕更新错或者删错数据,每次update或者delete都在事务中进行,确保没问题后再提交(事务我后面会介绍)。
上面是update的基本用法,也还有其他的情况,比如where后面所接的指定条件,可以是大于某个数或者在某个范围内,或者跟一个子查询等等,即这里where后面能写的条件跟select中是类似的。因为更新前,先将需要更新的数据筛选出来,再执行更新操作。例如将所有不及格同学的成绩都改为60分,可以写成:
update dbo.score set score = 60 where score < 60;
更新后的值也可以是一个表达式,而非某个具体的值,例如将学号001同学所有课程的分数都加上10分,可以写成:
update dbo.score set score = score + 10 where studentnumber = '001';
要提醒的一点是:更新某条数据时,各列是同一时间更新的,例如有下面一个sql:
update dbo.t set cola= cola + 10 , colb =cola+10;
执行完之后,cola和colb的结果是一样的,并不是说colb在a已经加了10的基础上再执行加10。
联表更新:
在查询数据的时候,如果要的数据是通过不同的条件指定的,这些条件并不在同一张表中,我们需要将多表关联进行查询。同理,如果在更新数据的时候,给我们的条件也不全在同一张表中,我们就需要联表来进行更新。例如,score表数据结构如下:
现要求将李华同学 操作系统这门课程 的成绩加一分,应该怎么写sql呢?
我们肯定要找到他对应的学号和操作系统这门课程的编号是多少,因为score表里有的只是编号而没有具体的值或课程名。(为什么不在score表里存这些具体的值呢?这在后面表的设计原则中会介绍)。
所以我们可以分3步,查“李华”的studentnumber--->查“操作系统”对应的coursenumber--->再将这两次查到的结果放在update语句where后面的条件中。只是有点繁琐,可以用联表更新将这3步合为一步,即:
update a set a.score = a.score + 1 from dbo.score as a inner join dbo.student as b on b.studentnumber = a.studentnumber inner join dbo.course as c on c.coursenumber = a.coursenumber where b.name = '李华' and c.name = '操作系统';
写上面这个sql的逻辑也是建立在多表关联查询的基础上,即首先写的sql是:
select a.score from dbo.score as a inner join dbo.student as b on b.studentnumber = a.studentnumber inner join dbo.course as c on c.coursenumber = a.coursenumber where b.name = '李华' and c.name = '操作系统';
通过关联student表和course表查出我们要更新的数据,然后再将select换成update,update之后是我们要更新的那个表名。通过上面使用表的别名大家应该也能看出,虽然update是写在一开始的,但是它执行的逻辑顺序却是最后。在这里补充一点关于sql语句的执行顺序:
对于常见的查询(select语句),其书写顺序如下:
select column1, column2
,你可以选择一个或多个列,也可以使用*
来表示查询所有列。from table_name
,这是数据来源的表。where column1 = value
,只有满足条件的行才会被返回。group by column1
,通常和聚合函数(如count()
、sum()
等)一起使用,对每个分组进行操作。having count(column1) > 10
。order by column1 asc
(升序,默认)或order by column1 desc
(降序),可以指定一个或多个列进行排序。但sql语句的执行顺序和书写顺序有所不同,主要的执行顺序是:
执行顺序对理解sql语句的运行非常有帮助!
说回更新语句,首先是要查询到需要更新的数据,即确定表--->筛选行--->计算新值(set语句)--->再更新数据。
关于update更新数据的知识,大概就这么多,大家需要掌握:
1.更新单列、更新多列
2.不同的限定条件来更新数据
3.基于表达式更新
4.表关联更新
最后还想重复一句,执行update的时候一定要慎重,不要忘记where限定条件,最好先将更新语句中指定的条件用select语句查一遍,确保要更新的数据是对的(后面说删除也是同理),在实际工作中如果弄错重要数据,后果很严重。
到此这篇关于【sql】update更新数据的文章就介绍到这了,更多相关sql update更新数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论