一般在更新时会遇到以下场景: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]。

update table
set
列名1 = if(条件1,值1,值2),
列名2 = if(条件2,值3,值4)
[where 条件];
  • 使用 case when

把表中 [符合条件的行的] 列名1字段中符合条件1的内容修改为值1 [,符合条件2的修改为值2,...] [,列名2字段中符合条件21的内容修改为值21,符合条件22的修改为值22,...] 。

update table
set 列名1 =
case
when 条件1 then 值1
when 条件2 then 值2
when 条件3 then 值3
...
end,
列名2 =
case
when 条件21 then 值21
when 条件22 then 值22
when 条件23 then 值23
...
end
[where 条件];

三、实例

students 表 (id表示主键,name是姓名,score是平均成绩)

id name score
1 李明 99
2 张三 74
3 孙华 59

(1)根据条件更新值

  • 把 students 表中 name 为张三的 score 字段的值全部修改为100。
#使用where
update students
set score = 100
where name = '张三';
id name score
1 李明 99
2 张三 100
3 孙华 59
  • 把 students 表中 id 大于等于2的所有行中 score 中59的部分全部修改为0,name 中三的部分全部修改为四。
#使用replace
update students
set score = replace(score,59,0),
name = replace(name,'三','四')
where id >= 2;

注意:张三替换之后是张四,并不是只有字段等于三时才能替换。

id name score
1 李明 99
2 张四 74
3 孙华 0

(2)按照不同条件更新不同值

  • 请把students表中score小于60的score字段全部改为0,否则改为100,name字段中的名字改为不及格,否则改为及格。
#批量更新多值 + if
update students
set
score = if(score < 60,0,100),
name = if(score < 60,'不及格','及格');
id name score
1 及格 100
2 及格 100
3 不及格 0

注意:更新的值要满足建表时的字段类型。比如score是int类型就不能更新为char类型。

  • 请把students表中score小于60的score字段全部改为0,name字段中的名字改为不及格;score大于等于90的score字段全部改为2,name字段中的名字改为优秀;score大于等于60小于90的score字段全部改为1,name字段中的名字改为良好。
#批量更新多值 + case when
update students
set
name = case
when score < 60 then '不及格'
when score >= 90 then '优秀'
else '良好'
end,
score = case
when score < 60 then 0
when score >= 90 then 2
else 1
end;

注意:更新的时候是按照代码语句的先后顺序更新的。可以尝试先更新score后更新name,结果是不一样的。

id name score
1 优秀 2
2 良好 1
3 不及格 0

最新文章

  1. strlen(); strcpy(); strcat(); strcmp() ---笔记
  2. Debian配置Apache2支持mod-python和cgi模块
  3. [AX2012 R3]在SSRS报表中使用QR二维码
  4. Java——线程间通信问题
  5. MySQL可视化管理工具 —— Navicat for MysSQL
  6. java servlet+jquery+json学习小例子
  7. svn简介与使用
  8. Validation of viewstate MAC failed 解决办法
  9. SpringBoot中关于Mybatis使用的三个问题
  10. jquery 表单校验
  11. 1、pandas使用sort_values排序
  12. MVA Prototype Only User License
  13. python第三方包的windows安装文件exe格式
  14. XP如何开启3389端口远程桌面
  15. bzoj 4823 [Cqoi2017]老C的方块——网络流
  16. photoshop cc 2014 下载安装及汉化资源及切图简要使用教程
  17. Node.js学习(篇章一)
  18. codeforce 35C fire again
  19. PHP 缓存插件之 Zend Opcache ( 取代 APC )
  20. UVa 1585 - Score - ACM/ICPC Seoul 2005 解题报告 - C语言

热门文章

  1. golang中的几种并发模式
  2. C#--String.Substring方法
  3. Oracle数据库PLSQL编程和存储过程
  4. 一个实用的 vite + vue3 组件库脚手架工具,提升开发效率
  5. springboot如何处理矩阵参数类型的url
  6. 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
  7. 京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用
  8. 我把 CPU 三级缓存的秘密,藏在这 8 张图里
  9. 【云原生 · Kubernetes】部署Kubernetes集群
  10. 为什么标准库的模板变量都是inline的