一、业务场景

  当前项目中数据库使用的postgresql,pgsql有很多的优点,比如开源免费,适合二次开发。pgsql有很多搭配使用的开源软件,比较易于拓展,语法和标准的SQL语法基本上差异不大。因此很多大公司都再用,比如像平安集团还有之前也听一个朋友说起过华为也是使用pgsql。大公司在进行技术选型时,肯定有出于自身各方面的考虑,是否侵权,数据库的性能,易用性等等的考量,最终才会决定使用。

  自己在进行某个操作时的业务场景是这样的,需要先根据条件查询某条数据是否存在,如果不存在则进行新增操作;如果已经存在则进行更新操作。按照这种方式最少都需要操作两次数据库,一次查询,一次新增/更新操作。

二、需求分析

  系统请求数量不大的情况下,这种处理方式没什么问题,可是当请求数量逐渐增多的时候,这种处理方式就会开始出现性能下降。那有什么优化方案呢?如果能减少和数据库交互的次数,则就可以达到优化的效果。负责人给我提出一个优化建议,使用新语法来进行操作。

三、解决方案

  自己立马去网上查找相关的资料,果然找到有种方式可以用来处理这种情况,语法是这样的:

insert into ke_topic_rank values ('test1','test2','test3', 7) on conflict (cluster,topic,tkey) do update set tvalue=excluded.tvalue;

关键字 on conflict 后面跟一个括号,用来判断括号里面的条件是否存在,如果已经存在则进行更新操作;如果不存在则进行新增操作。这样就大大地简化了与数据库的交互次数,不用在去查询数据之后在做判断。自己立马进行测试,类似的语法如下

INSERT INTO 表 (

gift_id,

gift_type

)

VALUES (

'36963',

3

)

on conflict (主键或者是多个字段,多个字段需要创建唯一组合索引)

do UPDATE

gift_type = 2

在公司测试的时候完全可行。

在搜索答案的同时,自己还发现mysql也具有同样的语法,以前没有注意过。不过Mysql的语法稍微有些区别:

INSERT INTO app_gift_info (

gift_id,

gift_type

)

VALUES (

'36963',

3

)

ON DUPLICATE KEY UPDATE

gift_type = 2;

执行第一次时的结果:

执行第二次时的结果:

测试结果符合要求.

参考文章

https://www.cnblogs.com/huangjinyong/p/9135498.html

https://www.cnblogs.com/swordfall/p/13083714.html

https://www.csdn.net/tags/MtjaEgxsOTAyNDYtYmxvZwO0O0OO0O0O.html

SQL执行一次完成新增或者修改操作-2022新项目的更多相关文章

  1. 执行新增和修改操作报错connection is read-only. Queries leading to data modification are not allowed

    出现这个问题的原因是默认事务只有只读权限,因此要添加下面的每一个add*,del*,update*等等. 分别给予访问数据库的权限. 方法名的前缀有该关键字设置了read-only=true,将其改为 ...

  2. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增记录SQL执行过程

    有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件.3.2版本我们在框架底层新增了记录框架运行的所有SQl过程 ...

  3. Oracle 如何循环查询结果集,进行新增或修改

    Oracle的PL/SQL中怎样循环查询的结果集,然后根据查询结果进行判断,是新增或修改操作 loop循环例子 for item in (select a,b,c from table_a where ...

  4. 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理

    SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...

  5. sql 操作常用操作语句 新增、修改字段等

    常用sql --sql 事务 BEGIN TRAN 事物名 )BEGIN ROLLBACK TRAN 事物名;RETURN;END COMMIT TRAN 事物名 --数据库清缓存 DBCC DROP ...

  6. DB查询分析器7.01新增的周、月SQL执行计划功能

                DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰              (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

  7. 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】

    问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...

  8. 【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?

    转自:https://www.cnblogs.com/happyday56/p/3849018.html 关键字:sql server复制 [SQL Server高可用性]数据库复制:修改表结构.新增 ...

  9. spring-jpa通过自定义sql执行修改碰到的问题

    在编写自定义SQL的时候需要注意 @Query 注解只能用来查询,想要进行添加.修改和删除操作需要配合 @Modifying 注解一同使用 @Modifying @Query("update ...

  10. SQL存储过程-新增和修改,参数Xml数据类型

    输入参数:xml数据类型  功能:新增和修改  --value() 方法从 XML 中检索 rogue 属性值.然后将该值分配给 int 变量. --将 Member 节点拆分成多行 SELECT T ...

随机推荐

  1. npm查看插件所有版本命令

    npm view webpack versions npm view webpack versions

  2. Centos安装Python3.8

    最直白的centos8安装python3.8yum install -y update安装 gcc和make插件:yum install gcc gcc-c++yum -y install gcc a ...

  3. How to 充分利用你的服务器

    服务器高性能计算指南 本文处于preview阶段,内容并不完全严谨,如有错误敬请原谅,适当参考. 目录 服务器高性能计算指南 什么样的计算适合当前服务器? 从CPU架构入手 两个CPU带来的影响 那么 ...

  4. 【图论】【Matlab】最小生成树之Kruskal算法【贪心思想超详细详解Kruskal算法并应用】

    最小生成树之Kruskal算法 注意:内容学习来自:b站CleverFrank数模算法精讲 导航 前言 实际问题引入 Kruskal算法 整体代码展示 尾声 前言 博主今天给大家带来的是最小生成树中两 ...

  5. 【C语言深度解剖】复数运算问题--【好题系列】学会这题,结构体没问题

    复数问题 今天博主给大家带来一道博主自己在学校做到的一个题目.这个题目可以很好的加深我们对C语言结构体的理解,在这里分享给大家.学懂这题,我们的C语言结构体,没问题了! 本篇建议收藏后食用!以免退出找 ...

  6. 使用DoraCloud免费版搭建办公桌面云

    DoraCloud是一款多平台的桌面虚拟化管理软件,支持Hyper-V.VMware.Proxmox.XenServer等多种虚拟化平台.DoraCloud在虚拟化平台上具有极大的灵活性,允许您的组织 ...

  7. 初次尝试GPU Driven —— 大范围植被渲染

    初次尝试GPU Driven -- 大范围植被渲染 GPU Driver简单概要,即把整体逻辑放到GPU上运行,解放CPU压榨GPU,初次尝试,记录一下研究过程. 渡神纪 塞尔达 塞尔达 塞尔达 在开 ...

  8. NC19999 [HAOI2016]放棋子

    题目链接 题目 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...

  9. NC16671 [NOIP2006]金明的预算方案

    题目链接 题目 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算, ...

  10. SpringBoot+Shiro+LayUI权限管理系统项目-9.核心知识点总结

    1.说明 本篇讲一下本项目几个重要的知识点,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.Shiro如何设置密码加密算法 1.在shiro配置文件中添加: @Bean public HashedC ...