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

  • 相关阅读:
    SQL2008-显示表大小行数
    SQL2008-备份SQL数据库的语句
    SQL2008-截取字段函数
    SQL2008-字符转数字CAST和CONVERT
    SQL2008-查询库中是否存在某表
    SQLServer 2000个人版下载
    SQL2008-不同数据库之间的触发器
    SQL2008--行号的得到
    Microsoft Visual Stduio 2005 Ent安装报错解决方法
    zlib快速编译脚本
  • 原文地址:https://www.cnblogs.com/ydymz/p/10484570.html
Copyright © 2020-2023  润新知