mysql 批量更新有哪些常用的?

2022-02-16 09:58:34 +08:00
 PrtScScrLk
update table set status = case `id`
when 1 then 0
when 2 then 0
when 3 then 0
when 4 then 0
when 5 then 0 end where id in ('1','2','3','4','5');

除了这样的批量更新语句还有什么高效的批量更新方式?

2395 次点击
所在节点    MySQL
12 条回复
onhao
2022-02-16 12:02:04 +08:00
触发器 ,是一个不错的选择
https://wuhao.pw/archives/268/
szyp
2022-02-16 12:10:35 +08:00
PrtScScrLk
2022-02-16 12:14:34 +08:00
@szyp 8.0 以上能用吗?我现在是 5.7
onhao
2022-02-16 12:35:40 +08:00
@PrtScScrLk load 5.7 8.0 都可以用的
Rache1
2022-02-16 12:35:47 +08:00
我觉得这种语句的效率,还不如单条高 ,而且语句还很难看
onhao
2022-02-16 14:03:20 +08:00
@Rache1 同感,所以用触发器来更新,岂不是更高效
onhao
2022-02-16 14:04:13 +08:00
@PrtScScrLk 敢问使用这样的语句场景是怎么样的?
PrtScScrLk
2022-02-16 14:11:40 +08:00
@onhao 回头我试试看,嗯,也试试触发器,我前端转后端,sql 学的不深= =,使用场景就是根据 id 批量修改状态 status
est
2022-02-16 14:22:00 +08:00
我现在最苦恼的是按条件更新一批 id ,需要知道哪些 id 符合条件并且成功更新了。
onhao
2022-02-16 14:58:59 +08:00
@est 也推荐你用 触发器 ,当更新完成后 对比更新前后更新后的值, 如果值不一样说明成功更新了,记录下更新的信息( ID ) ,这样你就知道那些 ID 更新了。
bxb100
2022-02-16 17:32:15 +08:00
真不建议使用存储过程,触发器,除非有专门的数据库管理员,业务变更这些都会成为定时炸弹
sockball07
2022-02-16 19:43:51 +08:00
刚好我也想问 把这些常数条件和常数值用 UNION 连接起来 再和待更新的表 JOIN 一下再更新对应的值 哪个快

大概长这样
UPDATE table main, { union } tmp
SET main.status = tmp.status
WHERE main.id = tmp.id

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834145

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX