zoukankan      html  css  js  c++  java
  • Oracle中Merge into的用法实例讲解

    最近在做一个需求,就是涉及到表的问题,前端传过来一条数据,根据主键,查询数据库,如果不存在,那么久插入到数据库中一条,如果存在的话,就是以主键的方式,对数据库中的数据,进行更新。

    拿到这个需求的时候,想的就是直接用if…else…代码进行判断,首先就是查询,查到了记录,就更新,没有查到,就进行数据的直接插入。

    这种方法,本来是没有什么问题的,毕竟都能够完成要求,只是,因为数据库中这张表的记录,实在是太大,通过代码的方式,进行查询判断的话,实在是太消耗时间了,后来查询了一下,这才是找到Oracle数据库的merge into的方法完成。

    首先,来看看merge into的基本语法(Oracle 9i引入的功能):

    MERGE INTO table_name alias1 
    
    USING (table|view|sub_query) alias2
    
    ON (join condition) 
    
    WHEN MATCHED THEN 
    
    UPDATE table_name 
    
    SET col1 = col_val1, col2 = col_val2 
    
    WHEN NOT MATCHED THEN 
    
    INSERT (column_list) VALUES (column_values);    
    

      

    可能对于这个语法,不是太了解,那么咱们现在看一个简单的例子:

    merge into Students st using newStudents nst on (st.id = nst.id) 
    
    when matched then 
    
    update set st.name = nst.name 
    
    when not matched then 
    
    insert values(nst.id, nst.name, nst.sex)
    

      

    这段sql的意思,就是代表着新的学生的id已经存在了数据库中的话,就是 when matched的时候,就执行update操作;when not matched的时候,执行插入操作。

    相比起用代码的判断再执行更新或者插入操作,sql语句的执行,在效率上面来说,无疑是得到了一定的提高,所以使用merge into,还是一个不错的选择。

    因为对数据库,不太熟悉,没有在第一时间,想到这种操作,这次用到了,也算是学习了,记录一下,以后说不定就是会有用到的时候。

  • 相关阅读:
    表格标签
    图片标签
    超链接标签
    媒体标签
    实体标签
    html常用的标签
    头信息的作用
    【bzoj5017】[Snoi2017]炸弹 线段树优化建图+Tarjan+拓扑排序
    【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛
    【bzoj4010】[HNOI2015]菜肴制作 拓扑排序+堆
  • 原文地址:https://www.cnblogs.com/liuzhihu/p/8176382.html
Copyright © 2011-2022 走看看