mysql 的批量插入比较便利,批量更新就有点难受了。这里记录一下,使用update join 对mysql单表的批量更新操作。
单表更新
案例
更具表中 content_id
和 outeach_id
字段改变 sort
的值,(不要问为啥不用ID,业务需要。)如下图。
有一招 update join
UPDATE `表A` a JOIN
(
SELECT 1 AS content_id, 1 AS outreach_id, 1 AS sort
UNION
SELECT 1 AS content_id, 2 AS outreach_id, 2 AS sort
UNION
SELECT 1 AS content_id, 3 AS outreach_id, 3 AS sort
UNION
SELECT 1 AS content_id, 4 AS outreach_id, 4 AS sort
) b USING(content_id, outreach_id)
SET a.sort=b.sort;
有大佬做了对比,update join 的效率是很高的。去看参考的第一个链接。
解释:
update join 可以用来跨表更新,这个网上就有很多了。 单表更新的思路就是把需要更新的数据组合成一张表,然后通过跨表来更新单表的数据。
这里就不能使用常用的 case when
来更新数据。
UPDATE test
SET sort = (
CASE
WHEN content_id = 1 and outeach_id = 1 THEN 1
WHEN content_id = 1 and outeach_id = 2 THEN 2
END
) WHERE id IN (1,2,3);
跨表更新
直接参考下面的参考链接。