当前位置: 首页 > news >正文

DBAPI如何实现插入数据前先判断数据是否存在,存在就更新,不存在就插入

DBAPI实现数据不存在即插入、存在即更新

场景

  • 往数据库插入数据的时候,需要先判断一下记录是否在数据库已经存在,如果已经存在就更新记录,如果不存在,才插入数据。

实现方案

  • 采用存储过程实现,以mysql为例子

创建存储过程

  • 在数据库执行以下语句创建存储过程
CREATE PROCEDURE upsert(IN v_id INT, IN v_name VARCHAR(255))
BEGIN
    DECLARE v_count INT;

    -- 尝试查找是否存在具有相同唯一键的记录
    SELECT count(1) INTO v_count FROM student WHERE id = v_id;

    -- 判断记录是否存在
    IF v_count > 0 THEN
        -- 更新记录
        UPDATE student SET name = v_name WHERE id = v_id;
    ELSE
        -- 插入新记录
        INSERT INTO student (id, name) VALUES (v_id, v_name);
    END IF;
END;

调用存储过程,传入两个参数,会根据第一个参数id判断数据是否存在,id存在就更新name,不存在就插入数据

例如 call upsert(3,'abc')

创建API

  • 设置 id name 两个参数
alt
  • sql填写call upsert( #{id}, #{name} ) alt

  • 保存即可

访问API

  • 先插入一条数据
alt
  • 可以看到数据新增
alt
  • 再传入同一个id,可以看到数据更新
alt
alt

本文由 mdnice 多平台发布

http://www.lryc.cn/news/446209.html

相关文章:

  • 【渗透测试】-灵当CRM系统-sql注入漏洞复现
  • c语言练习题1(数组和循环)
  • 实验3 Hadoop集群运行环境搭建和使用
  • 前端文件上传全过程
  • MySQL中的函数简单总结,以及TCL语句的简单讲解
  • GPS在Linux下的使用(war driving的前置学习)
  • 开发经验总结: 读写分离简单实现
  • MySQL(面试题 - 同类型归纳面试题)
  • 【C++ Primer Plus习题】17.7
  • vue3(整合版)
  • 复制他人 CSDN 文章到自己的博客
  • 【算法——二分查找】
  • Cisco Packet Tracer的安装加汉化
  • MMain函数定义为WinMain函数看port1632.h和pwin32.h文件
  • 单词搜索问题(涉及递归等)
  • Redis的一些通用指令
  • C++中vector类的使用
  • cmaklist流程控制——调试及发布
  • 制作一个能对话能跳舞的otto机器人
  • git配置SSH
  • mozilla/pdf.js view.html加载指定页码
  • Qt之QFuture理解
  • 求二叉树的高度(递归和非递归)
  • Java查找算法——(四)分块查找(完整详解,附有代码+案例)
  • 进制数知识(2)—— 浮点数在内存中的存储 和 易混淆的二进制知识总结
  • 类似QQ聊天功能的Java程序
  • Redis 键值对数据库学习
  • 逆向推理+ChatGPT,让论文更具说服力
  • 「JavaScript深入」一文说明白JS的执行上下文与作用域
  • Qt C++设计模式->组合模式