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不支持,看來這東西科普性不高,所以就寫一下了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM