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不支持,看来这东西科普性不高,所以就写一下了。

上一篇:「暑期训练」「Brute Force」 Money Transfers (CFR353D2C)


下一篇:帆软报表FineReport中数据连接的JDBC连接池属性问题