zoukankan      html  css  js  c++  java
  • mysql实现“存在即更新,不存在即插入”

    方法1:使用replace关键字

    replace是insert的增强版,可以实现插入的数据和已存在的数据发生主键或者唯一键重复,则删除已存在的数据,再实现插入,如果不重复,则直接插入数据。

    结合Mybatis批量处理,用法如下:

    <update id="updateSchoolTable" useGeneratedKeys="true" parameterType="java.util.List">
    <!-- 存在则更新,不存在则插入 -->
    replace into
    schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)
    values
    <foreach collection="list" item="schoolDataForm" separator=",">
    (
    #{schoolDataForm.Id},
    #{schoolDataForm.describeDataForm},
    #{schoolDataForm.childrenID},
    #{schoolDataForm.relevanceID},
    #{schoolDataForm.showType}
    )
    </foreach>
    </update>
    方法2:使用ON DUPLICATE KEY UPDATE

    该方法能够在主键或者唯一键重复时,修改原记录中某字段的数据。

    结合Mybatis批量处理,用法如下:

    <update id="updateSchoolTable" useGeneratedKeys="true" parameterType="java.util.List">
    insert into
    schoolTable(Id,describeDataForm,childrenID,relevanceID,showType)
    values
    <foreach collection="list" item="schoolDataForm" separator=",">
    (
    #{schoolDataForm.Id},
    #{schoolDataForm.describeDataForm},
    #{schoolDataForm.childrenID},
    #{schoolDataForm.relevanceID},
    #{schoolDataForm.showType}
    )
    </foreach>

    <!--存在即可修改下述字段的数据,注意values()中的内容是数据表中相应的字段名-->
    ON DUPLICATE KEY UPDATE
    describeDataForm=values(describeDataForm),
    childrenID=values(childrenID),
    relevanceID=values(relevanceID),
    showType=values(showType)
    </update>
    性能区别:

    正如replace底层实现所示,如果主键重复会先删除数据库中原来的记录,插入新纪录。但是数据库删除操作需要维护主键索引,这无疑需要消耗性能。

    ON DUPLICATE KET QPDATE只是在主键重复时修改所需字段的值,所以不影响主键。维护成本自然相对于replace低。

    注意:在数据量较小时,两者效率大致相同,都很快,但是出现大量数据(百万级别)时,差异就显示出来了。

     
    ---------------------

  • 相关阅读:
    Dynamics AX 2012 R2 在增强入站端口中找不到自定义服务操作
    Dynamics AX 2012 R2 切换环境后项目导入报错
    win8以上版本离线安装.NET
    Pro ASP.NET MVC 5 Framework.学习笔记.6.4.MVC的必备工具
    Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具
    vs2010 仿XCode风格的头注释宏
    [转]微软SerialPort秘籍[SerialPort为什么死锁程序的分析]
    jqGrid中选择的行的数据[转]
    【JQGRID DOCUMENTATION】.学习笔记.6.Editing:Common Rules
    【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing
  • 原文地址:https://www.cnblogs.com/ly570/p/11235470.html
Copyright © 2011-2022 走看看