Mysql中的INSERT ... ON DUPLICATE KEY UPDATE
2023-04-18 16:11:25 时间
一、前言
在日常业务开发中经常有这样一个场景,首先创建一条记录,然后插入到数据库;如果数据库已经存在同一主键的记录,则执行update操作,如果不存在,则执行insert操作;
这个操作可以在业务层做,也可以在数据库层面做;
业务层一般做法是先查询,如果不存在在插入,如果存在则更新,但是查询和插入不是原子性操作,在并发量比较高的时候,可能两个线程都查询某个记录不存在,所以会执行两次插入,然后其中一条必然会因为主键(这里说的主键不是递增主键)冲突而失败。
数据库层mysql中INSERT ... ON DUPLICATE KEY UPDATE就可以做这个事情,并且是原子性操作
二、INSERT ... ON DUPLICATE KEY UPDATE命令
2.1单条记录下使用
INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
如上sql假如t1表的主键或者UNIQUE 索引是a,那么当执行上面sql时候,如果数据库里面已经存在a=1的记录则更新这条记录的c字段的值为原来值+1,然后返回值为2。如果不存在则插入a=1,b=2,c=3到数据库,然后返回值为1。
2.2多记录下使用
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(c);
相关文章
- 单细胞工具箱|singleR-单细胞类型自动注释(含数据版)
- spatial4j入门实战
- 容灾系列(六)——数据存储容灾建设
- 在真实环境中使用深度残余网络进行面部情感识别
- 基础网络云服务器&云数据库资源切换私有网络如何实现IP不变
- 实战篇:Oracle 配置透明网关访问 MySQL 详细教程
- 如何计算服务限流的配额
- 分区副本限流机制三部曲(源码篇)
- 「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
- 云时代,我们到底需要怎样的数据库?
- OushuDB 学习经验分享(二):与HAWQ的区别
- Firestorm - 腾讯自研Remote Shuffle Service在Spark云原生场景的实践
- CancerSCEM: 人类癌症单细胞表达图谱数据库
- GT Transceiver中的RX功能块简述
- 我是如何赢得吴恩达首届 Data-centric AI 竞赛的?
- 一文速览 | 对话生成预训练模型
- 《云原生:运用容器、函数计算和数据构建下一代应用》
- SLAM中位姿估计的图优化方法比较
- 我是怎么用MySQL的
- 还在用分页?你out了 !试试 MyBatis 流式查询,真心强大!