一般在更新时会遇到以下场景:1.全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。
一、方法分类
二、具体用法
(1)根据条件更新值
- 根据指定条件更新(多列)(全部更新)
把表中 [符合条件的行的] 列名1字段中的值全部修改为值1 [,列名2字段中的值修改为值2]。
update 表名
set 列名1= 值1[,列名2=值2][where 条件];
- 替换指定值(多列)(部分更新)
把表中 [符合条件的行的] 列名1字段中的查找内容全部修改为替换内容 [,列名2字段中的查找内容全部修改为替换内容]。
update 表名
set 列名1=replace(列名1,'查找内容','替换内容')[,列名2=replace(列名2,'查找内容','替换内容')][where 条件];
(2)按照不同条件(批量)更新不同值
- 使用 if
把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1,否则修改为值2 [,列名2字段中符合条件2的内容修改为值3,否则修改为值4]。
updatetableset
列名1=if(条件1,值1,值2),
列名2=if(条件2,值3,值4)[where 条件];
- 使用 case when
把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1 [,符合条件2的修改为值2,…] [,列名2字段中符合条件21的内容修改为值21,符合条件22的修改为值22,…] 。
updatetableset 列名1=casewhen 条件1then 值1when 条件2then 值2when 条件3then 值3...end,
列名2=casewhen 条件21then 值21when 条件22then 值22when 条件23then 值23...end[where 条件];
三、实例
students 表 (id表示主键,name是姓名,score是平均成绩)
idnamescore1李明992张三743孙华59
(1)根据条件更新值
- 把 students 表中 name 为张三的 score 字段的值全部修改为100。
#使用whereupdate students
set score =100where name ='张三';
idnamescore1李明992张三1003孙华59
- 把 students 表中 id 大于等于2的所有行中 score 中59的部分全部修改为0,name 中三的部分全部修改为四。
#使用replaceupdate students
set score =replace(score,59,0),
name =replace(name,'三','四')where id >=2;
注意:张三替换之后是张四,并不是只有字段等于三时才能替换。
idnamescore1李明992张四743孙华0
(2)按照不同条件更新不同值
- 请把students表中score小于60的score字段全部改为0,否则改为100,name字段中的名字改为不及格,否则改为及格。
#批量更新多值 + ifupdate students
set
score =if(score <60,0,100),
name =if(score <60,'不及格','及格');
idnamescore1及格1002及格1003不及格0
注意:更新的值要满足建表时的字段类型。比如score是int类型就不能更新为char类型。
- 请把students表中score小于60的score字段全部改为0,name字段中的名字改为不及格;score大于等于90的score字段全部改为2,name字段中的名字改为优秀;score大于等于60小于90的score字段全部改为1,name字段中的名字改为良好。
#批量更新多值 + case whenupdate students
set
name =casewhen score <60then'不及格'when score >=90then'优秀'else'良好'end,
score =casewhen score <60then0when score >=90then2else1end;
注意:更新的时候是按照代码语句的先后顺序更新的。可以尝试先更新score后更新name,结果是不一样的。
idnamescore1优秀22良好13不及格0
非常荣幸您能阅读到最后,希望文章中的内容能够帮助到您。
本博客内容均为博主原创,未经授权,请勿转载,谢谢!
版权归原作者 酸菜鱼土豆大侠 所有, 如有侵权,请联系我们删除。