mysql插入更新insert into

MySQL数据库中实现记录的插入和更新操作有多种方式。在本文中,我们将讨论其中的几种常见实现方式,并提供相应的源代码示例。 如果你只需要插入一条新记录或更新现有记录的某些列,可以使用第一种方法。该方法首先尝试插入一条新记录,如果唯一键冲突,则从子查询中选择指定的列值进行更新。该语句首先尝试插入一条新记录,如果存在唯一键冲突,则删除旧记录并插入新记录。以上是几种常见的MySQL数据库中实现记录插入和更新的方法。替换为目标表的实际名称,并提供要插入或更新的列名和相应的值。替换为目标表的实际名称,并提供要插入或更新的列名和相应的值。替换为目标表的实际名称,并提供要插入或更新的列名和相应的值。替换为你要检查的唯一键的值。 阅读详情

插入更新

背景:在某些情况下,我们需要保证插入的数据只有一条记录,业务层通常是先查询,有返回值则更新,否则插入数据。

mysql有特定的语句可以一条sql完成,从而避免业务层累赘的代码逻辑。

eg:商品信息goods同步到第三方接口,新增数据为入库,后续为修改。在日志记录log对于goods_id保持唯一。连表查询时,如果log种goods_id为空说明是新增,否则更新日期小于goods种的日期则为修改。

不要问为什么没有使用MQ,有些行业它就是不让用。

SELECT DISTINCT 
			CASE WHEN l.goods_id is null THEN 0 ELSE 1 END upstate,  -- 新增更新状态0新增 1更新
                m.*
                FROM  goods m 
                LEFT JOIN (SELECT goods_id, MAX(  last_update_datetime)last_update_datetime FROM event_goods_log GROUP BY goods_id) e  ON e.goods_id= m.goods_id
                LEFT JOIN  goods l  ON m.bill_id= l.bill_id
                WHERE m.status=1 
                AND (e.bill_id  IS NULL OR  e.last_update_datetime < m.last_update_datetime)
                ORDER BY  m.last_update_datetime DESC 

1.存在则更新(不影响其他字段),不存在则插入

insert into 表名(字段1,字段2) VALUES(值1,值2)
ON DUPLICATE KEY UPDATE username=值3

如上语句的意思的意思是如果字段1不存在(主键,唯一索引或者组合索引能唯一条件不存在),则执行插入语句,存在则执行更新语句,该更新只更新需要的字段,不影响其他字段的值;

2.存在则更新(先删除后更新),不存在则插入

REPLACE INTO 表名(字段1,字段2)
VALUES(值A,值B);
如上语句的意思的意思是如果字段1不存在(主键,索引或者唯一条件不存在),则执行插入语句,存在则执行更新语句,该更新是将该条存在的记录删除,然后再插入,所以其他的字段的值都是NULL;

3.存在则忽略,不存在插入

INSERT IGNORE INTO 表名(字段1,字段2)
VALUES(值A,值B);
如上语句的意思是如果字段1不存在(主键,索引或者唯一条件不存在),则执行插入语句,如果存在,直接忽略不修改任何数据

总结如下:

ON DUPLICATE key update是根据索引字段是否重复来判断是否执行,如果重复则执行update,否则则执行insert。

优先级:主键>唯一索引

  • 当主键重复时则执行update
  • 当主键不重复,唯一索引重复时也执行update
  • 当主键和唯一索引值都不重复才执行insert
    PS:特殊情况,当主键重复执行update时,如果此时唯一索引字段与其他字段也重复则会报错

1.如果表中不存在主键记录,replace和insertupdate都与insert是一样的特点。
2.如 果表中存在主键记录,replace相当于执行delete 和 insert两条操作,而insert
update的相当于执行if exist do update else do insert操作。因此,如果replace填充的字段不全,则会导致未被更新的字段都会修改为默认值,并且如果有自增id的话,自增id会变化为最新的 值(这样如果是以自增id为标志的话可能导致记录丢失);而insert*update只是更新部分字段,对于未被更新的字段不会变化(不会强制修改为默 认值)。

使用INSERT INTO ... ON DUPLICATE KEY UPDATE批量插入更新导入excel数据的实践场景应用 是 MySQL 中的一个非常有用的语法,它允许你在插入新记录时,如果记录的唯一键(如主键或唯一索引)已存在,则执行更新操作而不是插入。这可以帮助你避免在插入数据时产生的重复键错误,并允许你以一种原子性的方式处理插入或更新的逻辑。 阅读详情

相关推荐

MySQL + PostgreSQL批量插入更新insertOrUpdate

???? 周周有福利,周周有惊喜 哪吒社区 - 风火轮计划 ???? Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强) ???? Java经典面试题大全:10万字208道Java经典面试题总结(附答案) ???? 简介:Java领域优质创作者????、优快云哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 这里写目录标题一、百度百科1、MySQL2、Pos

学Java,找哪吒 9683

mysql插入并更新(on duplicate key update)

Mysql插入数据,如果存在此数据,那么就更新这条数据,否则插入数据。 使用 on duplicate key update。 准备工作 建表 create table user_info( id int auto_increment primary key, name varchar(20), user_code varchar(20) unique not null, age int ); 建立了一个表,这个表有主键(id),有唯一键(user_code)。 插入数据 insert int

lw18751836671的专栏 8559

用废旧汽车电池DIY家用UPS:手把手教你低成本搭建Wi-Fi不断电系统

本文详细介绍了如何利用废旧汽车电池DIY低成本家用UPS系统,确保Wi-Fi设备在断电时持续供电。通过精选材料、电路搭建和安全防护,实现高效稳定的电源转换与智能切换,成本仅为市售UPS的三分之一。特别适合家庭办公和远程工作者提升网络供电可靠性。

weixin_29200485的博客 462

MySQL插入并更新

Mysql方式。

chengyuan的博客 816

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5770

Cesium中实现GPU计算的泥石流地形侵蚀

通过模拟分析,可以提前识别可能发生泥石流的区域,为防灾减灾提供依据,及时发布预警,避免或减少人员伤亡和财产损失。:在建设公路、桥梁、水库等基础设施时,通过泥石流模拟分析,可以预测泥石流可能对这些设施的影响,帮助工程设计者采取合适的防护措施,确保设施的安全性。:模拟分析有助于为灾后救援工作提供科学依据,确定受灾区域的范围、救援难度等,为救援队伍制定合理的行动方案,提升救援效率。:泥石流是山区常见的地质灾害之一,通过模拟分析可以评估某一地区发生泥石流的风险,指导土地使用规划、人口迁移等决策。

weixin_43481439的博客 1319

mysql实现插入更新

mysql实现插入更新

NBSP的博客 580

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8942

mysql insert重复更新_MySQL 重复插入时更新 insert into on dumplicate key update /replace into...

方式1:insert into on dumplicate key update例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:代码如下:INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;UPDATE TABLE SET c=c+1 WHERE a=1;方式2:re...

weixin_34656273的博客 560

电子取证之服务器取证思路

服务器取证是一个技术性很强的领域,涉及到多个环节,包括网站重构、网站代码分析、容器分析等。数据库密码的获取通常通过查看配置文件、日志文件、备份等途径,同时可以通过一些绕过技术如禁用身份验证来获取权限。对于不同的数据库,需要根据其特性采取相应的应对方法和命令。

2401_84830066的博客 2486

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

weixin_42412049的博客 2275

MySql 插入或更新(replace into 、insert into)

在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。replace可以去判断主键是否重复重复则更新否则插入。 replace into 有三种形式 1、replace into tbl_name(col_name, …) values(…) 2、replace into tbl_name(col_name, …) select … 3、replace into tbl_name set col_name=value, … ...

姚鑫国的博客 839

嵌入式工程师成长之路(3)——PCB设计

带有目的的学:要知道,PCB板子做出来需要我们给厂家哪些东西,我们设计板子的时候,需要遵循哪些设计规范,防止画好也是块废板子。然后再逐步开始学习画板。

云轩阁 8万+

mysql 批量插入更新 insert into on duplicate key update

模型如下 INSERT INTO t (id, age) VALUES (3, 28), (4, 29) # 这里可以添加多组数据 ON DUPLICATE KEY UPDATE id = VALUES(id), age = VALUES(age); # 这里是更新时需要更新的字段及值

qq_34567147的博客 1692

知识图谱-KGE-语义匹配-双线性模型-2018:SimplE

【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随

u013250861的博客 957

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql中replace into(删除插入)/insert into on duplicate update(更新插入)/INSERT IGNORE INTO(插入或忽略)

准备工作 建表 CREATE TABLE IF NOT EXISTS `t_javastack`( `id` INT AUTO_INCREMENT, `title` VARCHAR(500) NOT NULL, `content` VARCHAR(100) NOT NULL, PRIMARY KEY ( `id` ) ); 插入数据 insert into t_javastack(title, content) values ('标题1', '内容1'), ('标题

weixin_43137670的博客 397

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql:如何实现插入或更新一条数据(对比 replace into 和 insert on duplicate key update)

环境: window10 mysql 8.0.25 DBeaver 参考: 《mysql:13.2.9 REPLACE Statement》 《mysql:13.2.6.2 INSERT … ON DUPLICATE KEY UPDATE Statement》 《博文:MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况》 《博文:MYSQL中replace into的用法》 1. 常见问题:如何一条sql语句实现插入或更新? 在sqlserver中我们可以

火焰 9349

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql新增,更新,批量插入操作

mysql新增和更新操作 一、Insert的几种语法 例子: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) DEFAULT NULL, `money` double DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username_index` (`username`) ) ENGINE=InnoDB AUTO_INCREM

weixin_42048853的博客 8811

MySQL学习之插入,更新和删除数据(INSERT INTO 和UPDATE SET和DELETE)

插入数据 一.数据插入 INSERT是用来插入或添加行到数据库表地,插入可以用几种方式使用: 1.插入完整的行 例子: INSERT INTO Customers VALUES(NULL, 'PeP E. LaPew' '100 Main Street' ,NULL); 2.插入行的一部分 这种方式提供列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序,其优点是:即使表的结构改变,词INSERT语句仍然能正常工作。 例子: INSERT INTO customers(

c1776167012的博客 4576

mysql重复插入insert时更新ON DUPLICATE KEY UPDATE_mysql insert into select from on duplicate key upd

/有记录就执行update操作。//没有记录就执行insert 操作。REPLACE INTO users (id,name,age) VALUES(123, ‘赵本山’, 50);VALUES(123, ‘赵本山’, 50), (134,‘Mary’,15);

2501_90404099的博客 683

二级MySQL基础知识(四)创建db_sp数据库,Insert into插入Update更新Delete删除数据,select查询数据

提示:二级MySQL常用数据库db_school,l练习数据库db_sp。

zokoru的博客 1534

mysql: INSERT IGNORE 与INSERT INTO、ON DUPLICATE 区别

1.INSERT IGNORE 与INSERT INTO的区别 INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。 eg: insert ignore into table(na

hzraymond的专栏 4740

MySQL批量插入与更新

建表 CREATE TABLE `t` ( `id` int(11) NOT NULL, `age` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1. insert into values、inser...

学无止境 12万+

使用MySQL的INSERT INTO ... ON DUPLICATE KEY UPDATE进行高效数据插入和更新

希望本文对您理解和使用这个功能有所帮助!

Mr_Chp的博客 1314

MySQL数据库-DML常见命令 插入 insert into 更新update 删除delete

DML常见命令 insert into update delete 插入数据 insert into 方式一(不推荐,了解) insert into 表名 values(值1,值2,.....); ps:从命令行无法看到插入字段是什么,无法确定插入数据的个数,过分依赖与数据库的表结构顺序 在插入额时候,值顺序必须和表结构的顺序保持完全一致,且个数相同 方式二 (推荐) insert into 表名(字段1,字段2,.....) values(值1,值2,......); insert in

weixin_45006403的博客 764

(5) MySQL INSERT插入条件判断:如果不存在则插入 || MySQL中replace into ||INSERT INTO … ON DUPLICATE KEY U...

摘要 我们经常需要进行sql的批量插入,要求:该条记录不存在则插入,存在则不插入。如果使用一条INSERT语句实现呢? ##test table: CREATE TABLE IF NOT EXISTS card ( cardno int(10) not null PRIMARY KEY, cardnum int(10) not null )engine=innodb defa

pandaj的专栏 2万+
上一篇: XXL-JOB任务分片
下一篇: Nginx 配置反向代理 WebSocket
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值