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;
相关推荐
天蓝色的鱼鱼4 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端
盐真卿4 小时前
python第八部分:高级特性(二)
java·开发语言
布列瑟农的星空4 小时前
前端都能看懂的Rust入门教程(三)——控制流语句
前端·后端·rust
上海合宙LuatOS4 小时前
LuatOS核心库API——【audio 】
java·网络·单片机·嵌入式硬件·物联网·音视频·硬件工程
Mr Xu_4 小时前
Vue 3 中计算属性的最佳实践:提升可读性、可维护性与性能
前端·javascript
汤姆yu4 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
TT哇4 小时前
【实习】银行经理端线下领取扫码功能实现方案
java
野犬寒鸦4 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
jerrywus4 小时前
我写了个 Claude Code Skill,再也不用手动切图传 COS 了
前端·agent·claude
玖月晴空4 小时前
探索关于Spec 和Skills 的一些实战运用-Kiro篇
前端·aigc·代码规范