SQL执行一次完成新增或者修改操作-2022新项目
2022/8/7 2:22:50
本文主要是介绍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新项目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行