SQL113+114 更新记录(一)(二)+更新数据知识总结

MySQL 更新数据(知识点)

(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 条件\];


SQL113 更新记录(一)

  • 语义为『当tag为PYTHON时,修改tag为Python』

第一种:

复制代码
UPDATE examination_info
SET tag = "Python"
WHERE tag = "PYTHON";

第二种:

复制代码
UPDATE examination_info
SET tag = REPLACE(tag, "PYTHON", "Python")
WHERE tag = "PYTHON";

第二种本题语法上可以省略 WHERE 子句,但业务逻辑上通常不能省略,具体原因如下:
1. 省略 WHERE 的后果

UPDATE 语句如果不带 WHERE 子句,会对表中所有行执行 SET 操作。

原语句的 WHERE tag = "PYTHON" 是只更新那些 tag 字段完全等于 "PYTHON" 的行。

省略 WHERE 后,表中所有行的 tag 字段都会被执行 REPLACE(tag, "PYTHON", "Python"),哪怕 tag 里只是包含 "PYTHON" 子串(比如 "PYTHON基础"、"高级PYTHON"),都会被替换成 "Python",这会导致数据被意外修改。

2. 保留 WHERE 的意义

原语句中的 WHERE 子句是精准筛选,确保只修改符合条件的行,避免全表更新带来的风险。

例如:如果表中有一行 tag 是 "PYTHON数据分析",原语句不会修改它;但省略 WHERE 后,这行的 tag 会被改成 "Python数据分析",这通常不是预期结果。

思维扩展:

第二种方式不仅可用于整体替换,还能做子串替换,例如要实现将tag中所有的PYTHON替换为Python(如CPYTHON=>CPython)

复制代码
UPDATE examination_info
SET tag = REPLACE(tag, "PYTHON", "Python")
WHERE tag LIKE "%PYTHON%";

SQL114 更新记录(二)

复制代码
update exam_record
set submit_time='2099-01-01 00:00:00',score=0
where start_time<'2021-09-01 00:00:00' and score is null;
相关推荐
Cache技术分享几秒前
340. Java Stream API - 理解并行流的额外开销
前端·后端
我叫黑大帅12 分钟前
前端如何利用 GitHub Actions 自动构建并发布到 GitHub Pages?
前端·面试·github
smallLabel15 分钟前
记一次 OpenClaw 飞书插件接入填坑指南: Error: spawn EINVAL
前端
zzjyr18 分钟前
react前端项目 fetch原生 与 umijs request 四种请求区别
前端
我叫黑大帅18 分钟前
前端总说的防抖与节流到底是什么?
前端·javascript·面试
小时前端18 分钟前
微信小程序选不了本地文件?用 web-view + H5 一招搞定
前端·微信小程序·uni-app
71Ove19 分钟前
告别手写字符串!UniApp 路由全自动类型生成工具
前端
掘金安东尼21 分钟前
从平面到空间:用 React Three Fiber 构建 3D 产品网格
前端·javascript·面试
小时前端21 分钟前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
用户6837093595521 分钟前
在 Rokid AR 眼镜里玩消消乐:基于 Unity 2022 LTS + UXR 3.0 SDK 的轻量级 AR 游戏尝试
前端