zoukankan      html  css  js  c++  java
  • 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不支持,看来这东西科普性不高,所以就写一下了。

  • 相关阅读:
    Saltstack
    搭建中小规模集群之rsync数据同步备份
    Python开发【第七篇】:面向对象二
    批量管理
    inotify
    Python开发【第六篇】:面向对象
    网络文件系统NFS
    Linux基础介绍【第九篇】
    Linux基础介绍【第八篇】
    Linux基础介绍【第七篇】
  • 原文地址:https://www.cnblogs.com/ydymz/p/10484570.html
Copyright © 2011-2022 走看看