Oracle与mysql批量新增或修改语法

来源:互联网 发布:如何申请淘宝小号流程 编辑:程序博客网 时间:2024/06/04 17:51

一、Oracle批量更新的merge into语法

MERGE INTO

是Oracle 9i以后才出现的新的功能。

那这个功能 是什么呢?简单来说,就是:“有则更新,无则插入”,用来合并UPDATE和INSERT语句.

通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,

连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。

这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

示例:

MERGE INTO T T1 --更新的表
USING (
视图或表) T2--源表
ON ( T1.a=T2.a)--连接条件
WHEN MATCHED THEN--存在则更新
  
UPDATE SET T1.b = T2.b
WHEN NOT MATCHED THEN --不存在则新增
  
INSERT (a,b) VALUES(T1.a,T1.b);

注意:不能更新on (T1.a=T2.a)关联条件中的字段

在mybaits中使用<foreach>标签批量更新或新增实例:

<update id="batchUpdateOrAddPlatform" >merge into T_BAS_PLATFORM t1 --需要更新的表using (   <foreach collection="list" item="item" index="index" separator="union all">      select      #{item.platformId,jdbcType=VARCHAR} PLATFORM_ID,      #{item.platformCode,jdbcType=VARCHAR} PLATFORM_CODE,      #{item.platformHeight,jdbcType=INTEGER} PLATFORM_HEIGHT,      #{item.platformWidth,jdbcType=INTEGER} PLATFORM_WIDTH,      #{item.lifitingPlatform,jdbcType=INTEGER} LIFITING_PLATFORM,      #{item.permissionsSiteId,jdbcType=INTEGER} PERMISSIONS_SITE_ID,      #{item.permissionsSiteName,jdbcType=VARCHAR} PERMISSIONS_SITE_NAME      from dual   </foreach>   )  t2--把需要更新的数据循环拼成一个虚拟表   on (t1.PERMISSIONS_SITE_NAME = t2.PERMISSIONS_SITE_NAME and t1.PERMISSIONS_SITE_ID = t2.PERMISSIONS_SITE_ID and   t1.PLATFORM_CODE = t2.PLATFORM_CODE   )--连表条件   when MATCHED THEN--存在则更新   update set   t1.FREIGHT_AREA = t2.FREIGHT_AREA,   t1.PLATFORM_HEIGHT = t2.PLATFORM_HEIGHT,   t1.PLATFORM_WIDTH = t2.PLATFORM_WIDTH,   t1.LIFITING_PLATFORM = t2.LIFITING_PLATFORM   WHEN NOT MATCHED THEN--不存在则新增   INSERT   (PLATFORM_ID,   PLATFORM_CODE,   PLATFORM_HEIGHT,   PLATFORM_WIDTH,   LIFITING_PLATFORM,   PERMISSIONS_SITE_ID,   PERMISSIONS_SITE_NAME)   VALUES   (   t2.PLATFORM_ID,   t2.PLATFORM_CODE,   t2.PLATFORM_HEIGHT,   t2.PLATFORM_WIDTH,   t2.LIFITING_PLATFORM,   t2.PERMISSIONS_SITE_ID,   t2.PERMISSIONS_SITE_NAME   )</update>

二、mysql中批量更新语法

语法示例: replace into t(id, update_time) values(1, now());

REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY

KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。 
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该

语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。


原创粉丝点击