zoukankan      html  css  js  c++  java
  • ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    转:

    ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    本文为博主原创,转载请注明出处。

           在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新,

    在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有

    ON DUPLICATE KEY UPDATE一步就可以完成,感觉实在是太方便了,

           该语句是基于唯一索引或主键使用,比如一个字段a被加上了unique index,并且表中已经存在了一条记录值为1,

    下面两个语句会有相同的效果:

    INSERT INTO table (a,b,c) VALUES (1,2,3)  
      ON DUPLICATE KEY UPDATE c=c+1;  
      
    UPDATE table SET c=c+1 WHERE a=1;

     ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割。

    再现一个例子:

        INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)  
          ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);  

    表中将更改(增加或修改)两条记录。

    在mybatis中进行单个增加或修改sql的写法为:

    复制代码
    <insert id="insertOrUpdateCameraInfoByOne" paramerType="com.pojo.AreaInfo">
        insert into camera_info( cameraId,zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name)
        VALUES(
            #{cameraId},#{zone1Id},#{zone1Name}, #{zone2Id},
            #{zone2Name}, #{zone3Id}, #{zone3Name},
            #{zone4Id}, #{zone4Name},)
        ON DUPLICATE KEY UPDATE 
        cameraId = VALUES(cameraId),
        zone1Id = VALUES(zone1Id),zone1Name = VALUES(zone1Name),
        zone2Id = VALUES(zone2Id),zone2Name = VALUES(zone2Name),
        zone3Id = VALUES(zone3Id),zone3Name = VALUES(zone3Name),
        zone4Id = VALUES(zone4Id),zone4Name = VALUES(zone4Name)
    </insert>
    复制代码

    在mybatis中进行批量增加或修改的sql为:

    复制代码
     <insert id="insertOrUpdateCameraInfoByBatch" parameterType="java.util.List">
          insert into camera_info(
              zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name,
              cameraId
              )VALUES
               <foreach collection ="list" item="cameraInfo" index= "index" separator =",">
                 (
                    #{cameraInfo.zone1Id}, #{cameraInfo.zone1Name}, #{cameraInfo.zone2Id},
                    #{cameraInfo.zone2Name}, #{cameraInfo.zone3Id}, #{cameraInfo.zone3Name},
                    #{cameraInfo.zone4Id}, #{cameraInfo.zone4Name}, 
                    #{cameraInfo.cameraId}, 
                 )
               </foreach>
               ON DUPLICATE KEY UPDATE
                   zone1Id = VALUES(zone1Id),zone1Name = VALUES(zone1Name),zone2Id = VALUES(zone2Id),
                   zone2Name = VALUES(zone2Name),zone3Id = VALUES(zone3Id),zone3Name = VALUES(zone3Name),
                   zone4Id = VALUES(zone4Id),zone4Name = VALUES(zone4Name),
                   cameraId = VALUES(cameraId)
        </insert>
        
    复制代码
  • 相关阅读:
    Unix命令大全
    vs2008 与 IE8出现的兼容性问题
    Java 创建文件、文件夹以及临时文件
    如何修改Wamp中mysql默认空密码
    PAT 乙级真题 1003.数素数
    Tags support in htmlText flash as3
    DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
    10 Great iphone App Review sites to Promote your Apps!
    HTML tags in textfield
    Delphi XE4 IOS 开发, "No eligible applications were found“
  • 原文地址:https://www.cnblogs.com/libin6505/p/10751512.html
Copyright © 2011-2022 走看看