• 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,还是一个不错的选择。

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

  • 相关阅读:
    Vue学习笔记(十三) 响应式原理
    CSS学习笔记(十一) CSS3新特性
    JavaScript学习笔记(十三) ES6新特性
    Node.js学习笔记(六) express模块
    Node.js学习笔记(五) http模块
    Node.js学习笔记(四) fs、os、path模块
    Node.js学习笔记(三) 模块系统
    Node.js学习笔记(二) 包管理器
    Node.js学习笔记(一) 安装配置
    用Visual Studio创建集成了gtest的命令行工程
  • 原文地址:https://www.cnblogs.com/liuzhihu/p/8176382.html
Copyright © 2020-2023  润新知