mysql优化系列-批量修改

如果有批量修改的场景,一般会这样写

BEGIN;
UPDATE `test` set name="1" where id=1;
UPDATE `test` set name="1" where id=2;
UPDATE `test` set name="1" where id=3;
...
COMMIT;

优化:

BEGIN;
UPDATE `test` set name="1" where id in (1, 2, 3, ...);
COMMIT;

但是这种优化,仅限于批量修改的字段和修改后的值都一样。

如果不同的记录修改的字段和值都不一样的话怎么优化呢?

case when then else end 是个好东西,例如:

原sql为

BEGIN;
UPDATE `test` set name='1' where id=1;
UPDATE `test` set name='2' where id=2;
UPDATE `test` set age=18 where id=3;
COMMIT;

优化后为:

BEGIN;
UPDATE `test` set
name = case id when 1 then "1" else name end,
name = case id when 2 then "2" else name end,
age = case id when 3 then 18 else age end
where id in (1, 2, 3);
COMMIT;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值