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;
相关推荐
We་ct37 分钟前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
墨风如雪3 小时前
甲骨文云(Oracle Cloud)最新注册防坑记录:被ABC了怎么办?
服务器
JAVA面经实录9174 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
陈随易4 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
道清茗4 小时前
【RH294知识点汇总】第 9 章 《 自动执行 Linux 管理任务 》常见问题
linux·运维·服务器
冰暮流星5 小时前
javascript之事件代理/事件委托
前端
许彰午6 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
陈随易6 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
Bat U7 小时前
JavaEE|多线程初阶(七)
java·开发语言
丑八怪大丑7 小时前
Java网络编程
linux·服务器·网络