Oracle、Mysql数据库中的insertOrUpdateBatch方法(数据存在则更新,不存在则插入方法)

 更新时间:2026年07月13日 08:38:03   作者:自律,约束。  
这篇文章主要介绍了Oracle、Mysql数据库中insertOrUpdateBatch方法的相关资料,Oracle用MERGE INTO实现,MySQL语法则完全不同,文中通过代码介绍的非常详细,需要的朋友可以参考下

Oracle 数据库 和 Mysql 数据库 中的SQL 存在不同的方言,在写SQL时要注意区分

1. Orecal 数据库

Orecal 数据库的  insertOrUpdateBatch 是用 mege into 类实现的

// merge into 语法  当数据存在时 更新数据, 不能更新 指定主键字段 (判断数据是否存在的字段)

merge into QWPH_XN.SYS_AREA   t1
using (select 'lkz001' as ID,'KD001' as P_ID  from dual) t2
on ( t1.ID = t2.ID and t1.P_ID = t2.P_ID)
when matched then
    update
    set t1.AREA_NAME = 'lkz0016666666666666666666'
when not matched then
    insert (ID,P_ID)
    values ('lkz002','KD001' );

    
//  ****  dual是一张临时表,也可以自己构建,例如:    

 merge into  QWPH_XN.SYS_AREA   t1
using DUAL
on ( t1.ID= 'lkz003')
when matched then
    update
    set t1.AREA_NAME = 'KEDONG'
when not matched then
    insert (ID,P_ID)
    values ('lkz003','KD003' );


<!--   根据指定 字段 进行更新, 不能更新关联条件中的 字段
       如果 更新字段 被 改动了,那就是 插入
-->
   
 <insert id="insertOrUpdateBatch">
            <foreach collection="collectList" item="entity" separator=";">
                merge into ${model}.SYS_AREA t1 using dual on (t1.ID = #{entity.id} and t1.P_ID = #{entity.pId})
                when matched then
                update
                <set>
                    <if test="entity.areaName != '' and  entity.areaName != null ">
                        AREA_NAME = #{entity.areaName},
                    </if>

                    <if test="entity.dtype != '' and  entity.dtype != null ">
                        DTYPE = #{entity.dtype},
                    </if>

                    <if test="entity.level != '' and  entity.level != null ">
                        LEVEL = #{entity.level},
                    </if>

                    <if test="entity.datasourceId != '' and  entity.datasourceId != null ">
                        DATASOURCE_ID = #{entity.datasourceId},
                    </if>

                </set>

                when not matched then
                insert (ID, AREA_NAME, P_ID, DTYPE, "LEVEL", DATASOURCE_ID)
                values (#{entity.id}, #{entity.areaName},#{entity.pId},
                #{entity.level},#{entity.dtype},#{entity.datasourceId})

            </foreach>

    </insert>

2. Mysql 数据库

Orecal 数据库 和 Mysql 数据库的 插入或更新 sql 语句 不一样

<!--
insert into on duplicate key update表示插入更新数据,
当记录中有PrimaryKey,或者unique索引的话,
如果数据库已经存在数据,则用新数据更新(update),
如果没有数据效果则和insert into一样。
-->

<insert id="insertOrUpdateBatch"keyProperty="uuid"useGeneratedKeys="true">

inSert intO TASK LOG(TASK_ID, TASK_NAME, EXEC TYPE, STATUS, EXEC_TIME, EXCEPTION_MESSAGE)
values
<foreach collection="entities" item="entity" separator=" ">
(#lentity,taskId}, #entity.taskName}, #lentity.execType}, #ientity,status}, #entity.execTime}, #lentity.exceptionMessage})
</foreach>
on duplicate key update
TASK ID = ValUeS(TASK ID)
TASK NAME = VLUeS(TASK NAME)
EXEC TYPE = ValUeS(EXEC_TYPE)
STATUS = valveS(STATUS).
EXEC TIME = VlveS(EXEC TIME)
EXCEPTION_MESSAGE = VaLUeS(EXCEPTION_MESSAGE)

</insert>

总结 

到此这篇关于Oracle、Mysql数据库中的insertOrUpdateBatch方法的文章就介绍到这了,更多相关Oracle、Mysql中insertOrUpdateBatch方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • oracle去除空格的三种方式举例总结

    oracle去除空格的三种方式举例总结

    这篇文章主要介绍了oracle去除空格的三种方式,分别是使用TRIM()函数去除字符串两端空格,使用REPLACE()函数替换掉所有空格,以及利用REPLACE()结合CHR()函数去除制表符、换行符、回车符和空格符,这些方法帮助优化字符串处理,需要的朋友可以参考下
    2024-11-11
  • 解析Oracle中多表级联删除的方法

    解析Oracle中多表级联删除的方法

    创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除。哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了
    2013-07-07
  • DB2数据库切换为oracle数据库经验教训总结(必看篇)

    DB2数据库切换为oracle数据库经验教训总结(必看篇)

    下面小编就为大家带来一篇DB2数据库切换为oracle数据库经验教训总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • oracle使用索引与不使用索引的性能详析

    oracle使用索引与不使用索引的性能详析

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据,下面这篇文章主要给大家分析介绍了关于oracle使用索引与不使用索引的性能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-10-10
  • Oracle 9i产品文档

    Oracle 9i产品文档

    Oracle 9i产品文档...
    2007-03-03
  • Oracle数据泵(expdp)导入导出数据的详细步骤

    Oracle数据泵(expdp)导入导出数据的详细步骤

    这篇文章主要介绍了Oracle数据泵(expdp)导入导出数据的详细步骤,文中详细描述了源数据库操作中的数据备份和目标数据库操作中的数据恢复过程,需要的朋友可以参考下
    2024-12-12
  • group by,having,order by的用法详解

    group by,having,order by的用法详解

    如果一个查询中使用了分组函数,任何不在分组函数中的列或表达式必须要在group by中,下面为大家简要介绍下group by,having,order by的用法
    2013-09-09
  • 一次简单的Oracle恢复Case实战记录

    一次简单的Oracle恢复Case实战记录

    这篇文章主要给大家介绍了一次简单的Oracle恢复Case实战过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Oracle RMAN三种不完全恢复方式的实战指南

    Oracle RMAN三种不完全恢复方式的实战指南

    在Oracle数据库的日常管理中,不完全恢复(Incomplete Recovery)是一项重要且实用的技能,尤其是在面对人为误操作(如误删表)或逻辑故障(如表空间损坏)时,本文将通过三个实际演示案例,逐一呈现三种不完全恢复方式的操作步骤,需要的朋友可以参考下
    2025-10-10
  • Oracle数据库统计信息方法详解

    Oracle数据库统计信息方法详解

    这篇文章主要介绍了如何查看和收集Oracle数据库中的统计信息,包括表、索引和列的统计信息,介绍了DBMS_STATS包的功能和使用方法,以及如何通过分析和删除统计信息来优化数据库性能,需要的朋友可以参考下
    2024-12-12

最新评论