码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mysql/Oracle 批量新增(存在则更新)


    **Mysql/Oracle 批量新增/冲突则更新** 表数据

    • 一、需求说明
    • 二、Mysql实现:批量新增(存在则更新)
      • sql文
      • ON DUPLICATE KEY UPDATE 方法说明
    • 三、Oracle实现:批量新增(存在则更新)
      • sql文
      • MERGE 语句语法

    一、需求说明

    1、记录用户多次每周考核的表t_result,表字段以及表数据如下:
    result:0 参加考核 1通过 2未通过

    iduuidresulttimecreatorcreate_timeeditoredit_time
    12380be960f-cb32-4cf1-81f0-fcd5a11c92ba02022-06-21 09:00:00sys2022-06-21 10:00:00

    2、从另一个平台获得的 用户考核记录临时表t_result_tmp,表字段和数据如下:

    uuidresulttime
    80be960f-cb32-4cf1-81f0-fcd5a11c92ba12022-06-21 09:00:00
    80be960f-cb32-4cf1-81f0-fcd5a11c92ba12022-06-28 09:00:00

    3、根据临时表t_result_tmp,更新t_result表:时间相同的更新,时间不存在的新增数据。

    二、Mysql实现:批量新增(存在则更新)

    sql文

    INSERT INTO t_result ( id, uuid, result, `time`, creator, create_time ) 
        (
    		SELECT DISTINCT
    			tr.id,
    			trt.uuid,
    			trt.result,
    			trt.`time`,
    			'平台A',
    			NOW() 
    		FROM
    			t_result_tmp trt
    			LEFT JOIN t_result tr ON tr.uuid = trt.uuid AND tr.`time` = trt.`time` 
    	) 
    	ON DUPLICATE KEY UPDATE result = VALUES(result), editor = '平台A', edit_time = NOW()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ON DUPLICATE KEY UPDATE 方法说明

    在insert的时候出现重复主键的时候,会执行后面的update语句。
    重复主键包含:①主键 ②唯一索引

    update字段可以直接赋固定值,写法如例子columnName = '平台A';
    也可以赋值当前冲突数据中的值,写法如例子columnName = VALUES(columnName)。

    三、Oracle实现:批量新增(存在则更新)

    sql文

    MERGE INTO t_result TR
    USING (
        SELECT UUID,
               RESULT,
               TIME
        FROM t_result_tmp
    ) TRT
    ON (TR.UUID = TRT.UUID AND TR.TIME = TRT.TIME)
    WHEN MATCHED THEN
        UPDATE
        SET TR.RESULT = TRT.RESULT,
            TR.EDITOR = '平台A',
            TR.EDIT_TIME = NOW()
    WHEN NOT MATCHED THEN
        INSERT ( UUID, RESULT, TIME, CREATOR, CREATE_TIME )
        VALUES ( TRT.UUID, TRT.RESULT, TRT.TIME, '平台A', NOW() )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    MERGE 语句语法

    MERGE [hint] INTO [schema.] table [t_alias]
    USING
    [schema.]{ table | view | subquery } [t_alias]
    ON ( condition )
    WHEN MATCHED THEN merge_update_clause
    WHEN NOT MATCHED THEN merge_insert_clause

    ① USING的数据集避免为null,数据库不为空的字段A,可以在ON后面加上条件 A IS NOT NULL
    ② ON子句的使用的字段不能够用于update,即Oracle不允许更新用于连接的列
    ③ 更新/插入的sql,不需要再写表名,merge后面已经加过表名。
    update set 列 = 固定值 或者 update set 列 = using的表字段
    insert values (值) 或者 insert (指定字段) values (对应的字段值)
    ④ update语句也可以加where条件,相当于on的补充写法

  • 相关阅读:
    AWS实操-EC2-创建购买linux(centos)EC2服务器
    关于推特社交机器人数据集(来自上一篇论文)
    同是负值像素,为何在matplotlib和opencv上显示不一样?
    ffmpeg 滤镜实现不同采样率多音频混音
    JavaScript相关操作
    论文(3):word插入参考文献/引文并更新参考文献/引文编号
    Qt的信号与槽的使用
    Jmeter系列-控制器Controllers的介绍(8)
    大一学生《Web编程基础》期末网页制作 基于HTML+CSS+JavaScript响应式个人主页相册介绍模板
    如何写一篇提升自己的文章
  • 原文地址:https://blog.csdn.net/poppyCL/article/details/125598674
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号