如果有批量修改的场景,一般会这样写
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;