MYSQL冷知识——ON DUPLICATE KEY 批量增删改

有个需求要批量增删改,并且是混合的,也就是仅不存在才增。

删简单,因为有个deleteStaute之类的字段,删除本质上就是就是一个修改

所以就是实现批量混合增改,然而组长说mysql不支持混合增改,代码上要一个一个操作很耗性能,打算拒了这需求

理所当然的要查一下对还是不对,,,

insertOrUpdate明显查ON DUPLICATE KEY关键字,然后百度第一个就是,惊了!

ON DUPLICATE KEY UPDATE
在UPDATE子句中使用VALUES(col_name)函数从INSERT...UPDATE语句的INSERT部分引用列值。

1 没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用本身要插入的col_name的值
2 本函数特别适用于多行插入。
3 VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL

看下他们的例子

INSERT INTO `test` (`a`, `b`, `c`) VALUES 
('3', '1', '1'),
('3', '2', '1'),
('3', '3', '1'),
ON DUPLICATE KEY UPDATE
a = VALUES(a),
b = VALUES(b),
c = VALUES(c)

然后mybatis随便改改

<insert id="insertOrUpdateByBatch" parameterType="java.util.List">
      insert into test(a,b,c)VALUES
           <foreach collection ="list" item="temp" index= "index" separator =",">
             (
                #{temp.a}, #{temp.b}, #{temp.c}
             )
           </foreach>
           ON DUPLICATE KEY UPDATE
               a= VALUES(a),b= VALUES(b),c= VALUES(c)</insert>

这题也问了一些技术群,大多数群都是说MySQL不支持,看来这东西科普性不高,所以就写一下了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券