SQL执行一次完成新增或者修改操作-2022新项目
一、业务场景
当前项目中数据库使用的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新项目的更多相关文章
- 执行新增和修改操作报错connection is read-only. Queries leading to data modification are not allowed
出现这个问题的原因是默认事务只有只读权限,因此要添加下面的每一个add*,del*,update*等等. 分别给予访问数据库的权限. 方法名的前缀有该关键字设置了read-only=true,将其改为 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增记录SQL执行过程
有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件.3.2版本我们在框架底层新增了记录框架运行的所有SQl过程 ...
- Oracle 如何循环查询结果集,进行新增或修改
Oracle的PL/SQL中怎样循环查询的结果集,然后根据查询结果进行判断,是新增或修改操作 loop循环例子 for item in (select a,b,c from table_a where ...
- 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理
SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...
- sql 操作常用操作语句 新增、修改字段等
常用sql --sql 事务 BEGIN TRAN 事物名 )BEGIN ROLLBACK TRAN 事物名;RETURN;END COMMIT TRAN 事物名 --数据库清缓存 DBCC DROP ...
- DB查询分析器7.01新增的周、月SQL执行计划功能
DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 1 引言 中国本土 ...
- 【mybatis】service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据【事务的问题】
问题描述: service层中一个方法中使用mybatis进行数据库的 多个修改操作,可能是update也可能是delete操作,但是sql语句命名执行并且在控制台打印出来了,但是数据库中未更新到数据 ...
- 【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
转自:https://www.cnblogs.com/happyday56/p/3849018.html 关键字:sql server复制 [SQL Server高可用性]数据库复制:修改表结构.新增 ...
- spring-jpa通过自定义sql执行修改碰到的问题
在编写自定义SQL的时候需要注意 @Query 注解只能用来查询,想要进行添加.修改和删除操作需要配合 @Modifying 注解一同使用 @Modifying @Query("update ...
- SQL存储过程-新增和修改,参数Xml数据类型
输入参数:xml数据类型 功能:新增和修改 --value() 方法从 XML 中检索 rogue 属性值.然后将该值分配给 int 变量. --将 Member 节点拆分成多行 SELECT T ...
随机推荐
- 强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0
强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0 1.定义算法 相比于Q learning,DQN本质上是为了适应更为复杂的环境,并且经过不断的改良迭代,到 ...
- Markdown常用书写语法合集
1. 文字设置 1.1 文字颜色 中常用的文字颜色有: 红色文字:<font color="red">红色文字</font> 浅红色文字:<font ...
- 百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]
相关文章: 基础知识介绍: [一]ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀.的博客-CSDN博客_ernie模型 百度飞桨: ...
- 【七】强化学习、gym学习平台扩充,更好的玩转虚拟环境,关于mujoco、mujoco-py、baselines安装配置
相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...
- 10.5 认识XEDParse汇编引擎
XEDParse 是一款开源的x86指令编码库,该库用于将MASM语法的汇编指令级转换为对等的机器码,并以XED格式输出,目前该库支持x86.x64平台下的汇编编码,XEDParse的特点是高效.准确 ...
- C/C++ 命名空间引用知识
标准命名空间 命名空间的使用 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; // 命名空 ...
- Python 原生Socket实现端口扫描
端口扫描,就是逐个对一段端口或指定的端口进行扫描.通过扫描结果可以知道一台计算机上都提供了哪些服务,Python中使用Socket即可实现对特定端口的探测,以及对C段的扫描. 扫描目标主机Banner ...
- 使用Fiddler复制并转发http响应数据
1.安装Fiddler 略 2.编辑FiddlerScript,增加拦截判断 Goto OnBeforeResponse,跳转到指定函数,在函数中添加拦截某些http代码,如下. if (oSessi ...
- FolkMQ "单线程"消息中间件 v1.0.32 发布
简介 采用 "单线程" + "多路复用" + "内存运行" + "快照持久化" + "Broker 集群模式& ...
- 从零开始的微信小程序入门教程(四),理解小程序事件与冒泡机制
壹 ❀ 引 我在之前初识WXML与数据绑定两篇文章中,介绍了小程序静态模板与样式相关概念,以及小程序几种常用数据绑定方式,在知道这些知识后,我们可以写一些不算复杂的小程序页面,并能将一些自定义的数据渲 ...