1、在实际应用场景中,我们会用到:如果这条数据在表中,就更新数据;如果不存在这条数据,就插入这条数据。
在oracle中,可以使用merge into实现,在mysql中可以使用ON DUPLICATE KEY UPDATE,这里只介绍oracle中的merge into实现方法,sql语法如下:


merge into testtable t using dual on (t.id = '1')  when not matched then insert (id,a,b) values (1,2,1)  when matched then update set b = b+1;  select * from testtable;(如果testtable是空表,执行上述语句之后如下:)
id    A    B
---------------
1     2    1select * from testtable;(如果再执行一次merge into,testtable结果)
id    A    B
---------------
1     2    2

解释:

using dual on (...)是一种固定写法,也可以写成 using (select 1 from dual) on (...) , 表名dual也可以写成其他的名字。

on(...)里面是条件,可以写一个条件,也可以用and连多个条件。

2、顺便介绍一下mybatis中怎么使用merge into,直接上代码,代码使用的是动态sql。

<update id="updateStaffEvaluation" parameterType="java.util.HashMap">  merge into staff_evaluation t   using dual on (t.login_id = #{loginId,jdbcType=VARCHAR})  when not matched then insert  <trim prefix="(" suffix=")" suffixOverrides="," >  <if test="userId != null" >  USER_ID,  </if>  <if test="loginId != null" >  LOGIN_ID,  </if>  <if test="userName != null" >  USER_NAME,  </if>  <if test="complexScore != null" >  COMPLEX_SCORE,  </if>  <if test="mobileServiceScore != null" >  MOBILE_SERVICE_SCORE,  </if>  <if test="broadbandScore != null" >  BROADBAND_SCORE,  </if>  <if test="keepScore != null" >  KEEP_SCORE,  </if>  <if test="state != null" >  STATE,  </if>  <if test="evaluateText != null" >  EVALUATE_TEXT,  </if>  <if test="beginTime != null" >  BEGIN_TIME,  </if>  <if test="endTime != null" >  END_TIME,  </if>  <if test="evaluatePerson != null" >  EVALUATE_PERSON,  </if>  </trim>  <trim prefix="values (" suffix=")" suffixOverrides="," >  <if test="userId != null" >  #{userId,jdbcType=VARCHAR},  </if>  <if test="loginId != null" >  #{loginId,jdbcType=VARCHAR},  </if>  <if test="userName != null" >  #{userName,jdbcType=VARCHAR},  </if>  <if test="complexScore != null" >  #{complexScore,jdbcType=VARCHAR},  </if>  <if test="mobileServiceScore != null" >  #{mobileServiceScore,jdbcType=VARCHAR},  </if>  <if test="broadbandScore != null" >  #{broadbandScore,jdbcType=VARCHAR},  </if>  <if test="keepScore != null" >  #{keepScore,jdbcType=VARCHAR},  </if>  <if test="state != null" >  #{state,jdbcType=VARCHAR},  </if>  <if test="evaluateText != null" >  #{evaluateText,jdbcType=VARCHAR},  </if>  <if test="beginTime != null" >  #{beginTime,jdbcType=VARCHAR},  </if>  <if test="endTime != null" >  #{endTime,jdbcType=VARCHAR},  </if>  <if test="evaluatePerson != null" >  #{evaluatePerson,jdbcType=VARCHAR},  </if>  </trim>  when matched then update  <set>  <if test="complexScore != null" >  t.COMPLEX_SCORE = #{complexScore,jdbcType=VARCHAR},  </if>  <if test="mobileServiceScore != null" >  t.MOBILE_SERVICE_SCORE = #{mobileServiceScore,jdbcType=VARCHAR},  </if>  <if test="broadbandScore != null" >  t.BROADBAND_SCORE = #{broadbandScore,jdbcType=VARCHAR},  </if>  <if test="keepScore != null" >  t.KEEP_SCORE = #{keepScore,jdbcType=VARCHAR},  </if>  <if test="evaluateText != null" >  t.EVALUATE_TEXT = #{evaluateText,jdbcType=VARCHAR},  </if>  <if test="beginTime != null" >  t.BEGIN_TIME = #{beginTime,jdbcType=VARCHAR},  </if>  <if test="endTime != null" >  t.END_TIME = #{endTime,jdbcType=VARCHAR},  </if>  <if test="evaluatePerson != null" >  t.EVALUATE_PERSON = #{evaluatePerson,jdbcType=VARCHAR},  </if>  </set>  where t.LOGIN_ID = #{loginId,jdbcType=VARCHAR}
</update>

注意:一定要用update标签。

Oracle数据库merge into的使用,存在则更新,不存在则插入相关推荐

  1. Oracle写merge语录,Oracle数据库MERGE语句

    一.使用背景 当需要对一个表根据不同条件分别进行INSERT.UPDATE以及DELETE操作时,可以使用MERGE(融合,合并)语句.MERGE语句可以根据不同条件获取要插入.更新或删除到表中的数据 ...

  2. oracle 仲宏伟,Oracle数据库Merge的使用

    语法: merge into table_name talbe_alias        //目标表 using(table | view | sub_query) alias      //源表 o ...

  3. oracle数据库merge into,merge into 的用法

    以前看到过merge into 不过都没怎么留意过,今天看到了,赶紧记录下: SQL> select version from product_component_version; VERSIO ...

  4. oracle数据库视图:定义、查询与更新 实践学习报告

    本篇博客分享SQL语言视图操作--详细实践学习报告(以截图方式展示) 软件:Oracle SQL Developer 目录 1.学生-课程数据库 2.视图 ①定义视图 ②查询视图 ③更新视图 ④视图的 ...

  5. sas9.2智能平台连接oracle数据库操作说明文档,SAS9.2 SID更新

    SAS9.2 SID更新 更新时间:2017/2/22 10:08:00  浏览量:560  手机版 SAS9.2 SID更新(SAS9.2 win32)(win64的SID在下面) 以后登录SAS不 ...

  6. mysql 读取oracle_RobotFramework读取mysql和oracle数据库

    一.robotframework连接mysql数据库 1.安装databaselibrary.pymysql 通过cmd命令执行:pip install robotframework-database ...

  7. Oracle数据库中的序列、索引和同义词,详细笔记。

    文章目录 数据库中的序列.索引和同义词 1. 序列 1.1 什么是序列 1.2 创建序列 1.2.1 通过DDL语句创建序列 1.2.2 使用工具创建序列 1.3 使用序列 1.3.1 查询序列 1. ...

  8. oracle2018补丁下载,下载 | Oracle补丁2018年4月重要补丁更新cpuapr2018-3678067 绿盟科技发布安全威胁通告...

    Oracle发布了2018年4月重要补丁更新 cpuapr2018-3678067,修复了254个不同程度的漏洞,比1月份的还多.绿盟科技发布< Oracle全系产品2018年4月关键补丁更新​ ...

  9. Oracle、MySQL、SqlServer、PG数据库merge into语法实现总结

    概述 多表关联查询的时候会用到临时表插入数据,然后再用select查行查询,在往临时表里插入数据的时候,我们经常会用到判断如果临时表里有了这部分数据我们就要更新数据,如果临时表里没有这部分数据我们就要 ...

最新文章

  1. titanic数据集_TF2.0结构化数据建模流程范例
  2. 为AI学术小白铺平道路,NeurIPS 2019推出New In ML2019特别会议
  3. CentOS6.2下使用Nokia E72i成功发送短信
  4. Python中的符号
  5. linux通过spi和stm32通信,双STM32通过SPI进行通信
  6. rpm 安装RabbitMQ 3.7.24版本-User can only log in via localhost
  7. HDU3786 找出直系亲属【关系闭包】
  8. 创建向导时为其添加path,指为jar添加到path里面
  9. Java从零开始学十五(继承)
  10. 5月份鸿蒙升级时间,事关所有华为手机用户,鸿蒙正式升级时间终于确定
  11. java虚拟器安装教程_Java虚拟机安装教程都有什么?该如何下载?
  12. hive系列-hive教程
  13. 关于扩展欧几里得算法的证明
  14. 计算机能安装几个硬盘,一台电脑最多能接多少个硬盘?
  15. ORACLE幻读(一)
  16. QT 虚拟键盘使用问题
  17. 历届NBA总决赛结果
  18. C++面试常见题目问与答(汇总一)
  19. debian7 安装Rhythmbox歌词插件
  20. 【个人理解】探究MDL

热门文章

  1. flink的operator state简单理解
  2. 【转】VB中NEW的用法(申请内存空间)
  3. VB 读写TXT文本文件函数
  4. 年总结(五):再次突破自我的半年(2016.3—2016.9)
  5. 英语总结系列(三):如何维持激情
  6. 活动 | 日立·INNOWAY “引领变革 启迪未来” 创意马拉松
  7. 悬赏17万:美国“知乎”的沙雕问题,需要AI来识别
  8. 苹果华人工程师被捕后续,按“商业间谍”指控,本人不认罪
  9. 萌新误入AI歧途怎么办?MIT博士小哥哥给你指条明路
  10. 阿里、京东、美团、百度面试总结