mysql实现存在则保存,不存在则更新
方式1 ON DUPLICATE KEY UPDATE
使用前提:表必须配置唯一键或者主键,且保存的字段中包含该键【重点】
原理:
ON DUPLICATE KEY UPDATE如果配合主键,存在数据a,新插入b,如果主键不冲突,会保存b。如果b主键和a冲突会删除b,然后更新a。ON DUPLICATE KEY UPDATE如果配合唯一键,mysql先插入一条数据,然后根据唯一键判断唯一键是否冲突,如果已经存在该键,就会删除后面插入的数据,对前面的那条数据执行更新操作。比如已经存在A,此时插入一条B,B和A冲突就会删除B,对A执行后面的更新操作。所以造成主键id+1。
基本语法
插入的字段必须包含master_id, award_name,这两个字段,否则唯一索引无效,mysql无法发现索引冲突,会一直执行保存动作,不会执行更新。
单条插入或者更新
INSERT INTO reward_center_award (master_id, award_name) VALUES('432564','京东e卡')
ON DUPLICATE KEY UPDATE
award_name='杜卡迪一辆'
批量插入或者更新
INSERT INTO reward_center_award (master_id, award_name,award_type) VALUES('432564','京东e卡',4), ('432564','杜卡迪',1),('432564','春风450',2)ON DUPLICATE KEY UPDATE
award_name='杜卡迪一辆'
初始化表
主键id,唯一索引由master_id,award_name组成,意思同一个品牌商的奖品名称是唯一的。
DROP TABLE IF EXISTS reward_center_award;
CREATE TABLE `reward_center_award` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',`state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否删除(0:删除,1可用)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`reward_guid` varchar(50) DEFAULT NULL COMMENT '奖励标识guid',`master_id` varchar(50) DEFAULT NULL COMMENT '品牌主Id',`master_name` varchar(50) DEFAULT NULL COMMENT '品牌主名称',`award_name` varchar(50) DEFAULT NULL COMMENT '奖品名称',`award_type` tinyint(4) DEFAULT NULL COMMENT '奖励类型 1:店铺商品,2:线下商品,3:积分,4:优惠券',`goods_name` varchar(100) DEFAULT NULL COMMENT '商品名称',`goods_price` decimal(13,2) DEFAULT NULL COMMENT '商品价格',`number` bigint(11) DEFAULT '0' COMMENT '奖品总数',PRIMARY KEY (`id`),UNIQUE KEY `master_id_award_name` (`master_id`,`award_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖品中心奖品表';
1. 表一开始为空,所以这里是保存一条数据。
INSERT INTO reward_center_award (master_id, award_name) VALUES('432564','京东e卡')
ON DUPLICATE KEY UPDATE
award_name='杜卡迪一辆'

执行结果

2. 同样的语句再执行一次
因为前面插入了一条数据a,这次又插入一条一样的数据b,这次会唯一索引冲突,会删除b,然后对a执行更新操作,主键id+1
INSERT INTO reward_center_award (master_id, award_name) VALUES('432564','京东e卡')
ON DUPLICATE KEY UPDATE
award_name='杜卡迪一辆'


3. 再插入一条不同的数据
因为前面主键+1,所以这里id从3开始了
INSERT INTO reward_center_award (master_id, award_name) VALUES('432564','春风450')
ON DUPLICATE KEY UPDATE
award_name='杜卡迪一辆'

方式二:REPLACE INTO
也需要存在主键或者唯一键
先删除原来数据,再插入。比如表里有A,插入一条和A一样的B时,会把A删除再插入B。
基本语法
插入的字段必须包含master_id, award_name,这两个字段,否则唯一索引无效,mysql无法发现索引冲突,会一直执行保存动作,不会执行更新。
单条插入或者更新
REPLACE INTO 表名(字段1,字段2)
VALUES(值A,值B);
批量插入或者更新
REPLACE INTO 表名(字段1,字段2)
VALUES(值A,值B),(值A,值B),(值A,值B),(值A,值B);
和上面同样的表
DROP TABLE IF EXISTS reward_center_award;
CREATE TABLE `reward_center_award` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',`state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否删除(0:删除,1可用)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`reward_guid` varchar(50) DEFAULT NULL COMMENT '奖励标识guid',`master_id` varchar(50) DEFAULT NULL COMMENT '品牌主Id',`master_name` varchar(50) DEFAULT NULL COMMENT '品牌主名称',`award_name` varchar(50) DEFAULT NULL COMMENT '奖品名称',`award_type` tinyint(4) DEFAULT NULL COMMENT '奖励类型 1:店铺商品,2:线下商品,3:积分,4:优惠券',`goods_name` varchar(100) DEFAULT NULL COMMENT '商品名称',`goods_price` decimal(13,2) DEFAULT NULL COMMENT '商品价格',`number` bigint(11) DEFAULT '0' COMMENT '奖品总数',PRIMARY KEY (`id`),UNIQUE KEY `master_id_award_name` (`master_id`,`award_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='奖品中心奖品表';
插入两条数据
INSERT INTO reward_center_award (master_id, award_name,award_type) VALUES('432564','杜卡迪','1'),('432564','春风450','2');

REPLACE INTO reward_center_award (master_id, award_name,award_type) VALUES('432564','杜卡迪',3);
id=1的被删除了,插入了一条新数据

完结!!!

相关文章:
mysql实现存在则保存,不存在则更新
方式1 ON DUPLICATE KEY UPDATE 使用前提:表必须配置唯一键或者主键,且保存的字段中包含该键【重点】 原理: ON DUPLICATE KEY UPDATE如果配合主键,存在数据a,新插入b,如果主键不冲突,会保存b…...
MCU固件升级系列1(STM32)
本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍,硬件选用STM32F407ZGT6(手里只有),来完成这系列教程。 前言 为什么需要固件升级: 功能更新:随着产品的迭代和用户需求的变化,可能需要…...
ImageJ 用户手册——第五部分(菜单命令Window)
. 菜单命令32. Window32.1 Show All32.2 Put Behind32.3 Cascade32.4 Tile 33. Help33.1 ImageJ Website33.2 ImageJ News33.3 Documentation33.4 Installation33.5 Mailing List33.6 Dev. Resources33.7 Plugins33.8 Macros33.9 Macro Functions33.10 Update ImageJ33.11 Refr…...
利用css实现视差滚动和抖动效果
背景: 前端的设计效果,越来越炫酷,而这些炫酷的效果,利用css3的动画效果和js就可以实现,简单的代码就能实现非常炫酷的效果。 原理: 利用 js监控scrollTop的位置,通过 top定位图片的位置&#x…...
以桨为楫 修己度人(一)
目录 1.人工智能开创的新时代 2.使命开启飞桨一春独占 3.技术突破奠定飞桨品牌一骑绝尘 4.行业应用积淀飞桨品牌一枝独秀 5.生态传播造就飞桨品牌一众独妍 6.深度学习平台的现状和未来思考 7月28日,2022全球数字经济大会“人工智能驱动未来产业论坛”在京召开&…...
网络编程之简单socket通信
一.什么是Socket? Socket,又叫套接字,是在应用层和传输层的一个抽象层。它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。 socket分为流socket和数据报socket,分别基于tcp和udp实现。 SOCK_STREAM 有以下…...
计算机图形辐照度学、光度学
文章目录 前言:一、什么是辐照度学二、什么是光度学 前言: 在计算机图形学中是把辐射(Radiance)等概念和亮度(Luminance)等概念不做区分的。辐射是辐照度学的概念,而亮度则是光度学上的概念。 辐照强高度并不意味着亮度就强,就比如…...
【无功功率控制】连接到无限电网的小型风电场的无功功率控制(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
使用pandas、xlrd、openpyxl读取Excel
首先创建一个示例Excel文件example.xlsx,其中包含以下数据: NameAgeGenderAlice28FemaleBob35MaleCharlie42MaleDave29MaleEve31Female 安装 pip install pandas pip install xlrd pip install openpyxl方法一:使用Pandas库 使用Pandas库来…...
Java面试题接口
Collection接口 List接口 迭代器 Iterator 是什么? Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭 代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移…...
内存取证小练习-基础训练
这是题目和wolatility2.6的链接 链接:https://pan.baidu.com/s/1wNYJOjLoXMKqbGgpKOE2tg?pwdybww 提取码:ybww --来自百度网盘超级会员V4的分享 压缩包很小,题目也比较简单基础,可以供入门使用 1:Which volatility…...
【Android -- 开源库】数据库 Realm 的基本使用
简介 Realm 是一个 MVCC (多版本并发控制)数据库,由Y Combinator公司在2014年7月发布一款支持运行在手机、平板和可穿戴设备上的嵌入式数据库,目标是取代 SQLite。Realm 本质上是一个嵌入式数据库,他并不是基于 SQLit…...
基于el-input的数字范围输入框
数字范围组件 在做筛选时可能会出现数字范围的筛选,例如:价格、面积,但是elementUI本身没有自带的数字范围组件,于是进行了简单的封装,不足可自行进行优化 满足功能: 最小值与最大值的相关约束࿰…...
车联网OTA安全实践
摘要: 近年来,智能汽车已成为全球汽车产业发展的战略方向,汽车技术与工程核心逐渐从传统硬件层面转移到软件层面,汽车行业已经踏上了软件定义汽车(SDV)的变革之路。 在SDV的大趋势下,汽车零部件…...
智融合·共未来丨智合同携手百融云创打造合同智能化应用服务平台
人工智能技术是当今社会的热议话题之一。近年来,众多企业在人工智能领域持续布局,相关技术已在社会生产各环节极大地提高了生产效率。如果把过去信息技术产业的发展比喻为“手工时代”,那么人工智能技术的出现则将把信息技术产业推向“自动化…...
iOS ARC
iOS ARC是自动引用计数的缩写,是一种内存管理技术。它是由苹果公司在iOS 5中引入的,用于自动管理对象的内存生命周期。在ARC中,开发者不再需要手动管理对象的内存,这大大简化了开发过程,同时也减少了内存泄漏的风险。 …...
【代码随想录】刷题Day13
1.deque使用 239. 滑动窗口最大值 deque的介绍在C语法(12)---- 模拟实现queue和stack_哈里沃克的博客-CSDN博客 其实deque就是一个两头都能进出数据的数据结构,我们之所以使用它就是因为他的结构特点就是两边出,这样我们既可以判…...
playwright连接已有浏览器操作
文章目录 playwright连接已有浏览器操作前置准备打开本地已有缓存的Chrome(理解)指定端口打开浏览器连接指定端口已启动浏览器(推荐) playwright连接已有浏览器操作 前置准备 pip install playwright # 安装playwright的python…...
深度学习模型评估简单介绍
文章目录 深度学习模型评估介绍训练集、验证集和测试集应用场景准确率和误差率精确率和召回率F1 分数ROC 曲线和 AUC总结 深度学习模型评估介绍 本教程将介绍深度学习模型的基本评估方法及它们的应用场景。我们主要关注监督学习模型。 训练集、验证集和测试集 在深度学习中&…...
PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算
PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算 前言官方示例单个程序内控制多个CPU/GPU/TPU简单说一下设备环境导包加载数据 FashionMNIST创建一个简单的CNN模型训练函数-只包含训练训练函数-包含训练和验证训练 多个服务器、多个程序间控制多个CPU/GPU/TPU参考链…...
数据流计算模型在边缘到云场景的优化实践
1. 数据流计算模型的演进与挑战数据流计算模型自诞生以来,已经成为分布式系统领域处理大规模数据的核心范式。这种模型通过将计算过程抽象为有向无环图(DAG),其中顶点代表数据处理算子,边代表数据流动路径,…...
思源宋体TTF完全指南:7种字重免费使用,打造专业中文排版
思源宋体TTF完全指南:7种字重免费使用,打造专业中文排版 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版找不到合适的免费字体而烦恼吗ÿ…...
基于SpringBoot的民宿预订与评价系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot与Vue框架的民宿预订与评价系统以解决当前旅游住宿服务领域存在的信息不对称问题用户体验碎片化问题以及数据管理分散化问题该…...
OpenUPM安全最佳实践:保护你的Unity包注册表完全指南 [特殊字符]
OpenUPM安全最佳实践:保护你的Unity包注册表完全指南 🔒 【免费下载链接】openupm OpenUPM - Open Source Unity Package Registry (UPM) 项目地址: https://gitcode.com/gh_mirrors/op/openupm OpenUPM作为开源Unity包管理器(UPM&…...
Elk内存管理深度解析:如何在100字节RAM上运行JavaScript
Elk内存管理深度解析:如何在100字节RAM上运行JavaScript 【免费下载链接】elk A low footprint JavaScript engine for embedded systems 项目地址: https://gitcode.com/gh_mirrors/elk/elk Elk是一个为嵌入式系统设计的超轻量级JavaScript引擎,…...
AI编码助手安全规则实战:为Cursor定制安全防线,防范硬编码与注入风险
1. 项目概述:当AI编码助手遇上安全红线最近在GitHub上看到一个挺有意思的项目,叫“Deadly244/cursor-security-rules”。光看名字,你可能会觉得这又是一个关于网络安全或代码审计的工具。但点进去仔细一看,发现它的定位非常精准且…...
避坑指南:STM32F407的ADC多通道采样,你的数据顺序真的对了吗?
STM32F407多通道ADC采样数据错位排查手册 在嵌入式开发中,ADC多通道采样是常见需求,但数据顺序错乱问题却让不少工程师深夜加班。上周有位同行发来求助:他的四通道温度监测系统运行两周后,突然出现通道数据交叉污染,导…...
从热设计小白到专家:我是如何用RC6-4-01这颗TEC搞定激光器温控的(真实项目复盘)
从热设计小白到专家:我是如何用RC6-4-01这颗TEC搞定激光器温控的(真实项目复盘) 激光器温控从来不是简单的"制冷片贴上去就行"。去年接手某光纤激光器项目时,面对客户要求的0.1℃控温精度,我盯着规格书里密密…...
RK3588 ARM开发板KVM虚拟机搭建与性能优化实战指南
1. 项目概述:为什么要在RK3588上折腾虚拟机?最近几年,国产芯片的势头越来越猛,尤其是在嵌入式和高性能计算领域。RK3588这颗芯片,作为瑞芯微的旗舰级SoC,凭借其8核CPU(4xA76 4xA55)…...
3大核心功能解密:HS2-HF_Patch如何让Honey Select 2游戏体验焕然一新
3大核心功能解密:HS2-HF_Patch如何让Honey Select 2游戏体验焕然一新 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 如果你正在玩Honey Select 2却…...
