MySQL插入相同数据后的处理(更新或忽略)

在实际的业务场景中,经常会遇到这样的需求:插入某条记录,但如果数据库中有这条记录的话那就作相应的处理(忽略或者更新),正常情况下需要程序分多个步骤去完成这样的需求,在MySQL中提供了两种方式去简化这个操作,那就是使用insert...on duplicate key update、replace into和insert ignore into

目录#

  • 一、insert...on duplicate key update的使用
  • 二、replace into的使用
  • 三、insert ignore into的使用

一、insert...on duplicate key update的使用

1、首先需要在判断条件上加上唯一索引,这个索引最好是单个字段的(比如是ID)
2、使用例子

Copy Highlighter-hljs
INSERT INTO tb_addrbook(ID,name,mobile) VALUE('1001','小李','13112345678') ON DUPLICATE KEY UPDATE name= '小李',mobile='13112345678'

解释:
在on duplicate key update后面,name和mobile字段是需要更新的内容,语句总体的意思是插入一条ID为1001的数据,名称是小李,电话是13112345678,如果数据表中有一条数据的ID是1001,那么将原来的name和mobile分别改为小李和13112345678(直接更新数据)

二、replace into的使用

1、使用方式同上,首先还是要有作为唯一判断的条件,并在这个字段上加上唯一索引,索引最好是单个字段的
2、使用例子:

Copy Highlighter-hljs
REPLACE INTO tb_addrbook(ID,name,mobile) VALUE('1001','小李','13112345678')

解释:
replace into的使用方式更直接粗暴,而且更容易懂,因为语法跟insert into是一样的,只是insert改成了replace,其工作原理是会将原来的1001的数据删除,然后再插入新添加的数据(先删除后插入),需要注意的是,如果ID是自动递增的,唯一判断条件是另外一个自动,那么更新之后,自增ID是会变的(比如原来ID是1,那么执行完replace into后ID就是2了)

三、insert ignore into的使用

1、使用方式同上,首先还是要有作为唯一判断的条件,并在这个字段上加上唯一索引,索引最好是单个字段的
2、使用例子:

Copy Highlighter-hljs
INSERT IGNORE INTO tb_addrbook(ID,name,mobile) VALUE('1001','小李','13112345678')

解释:
INSERT IGNORE INTO的使用方式也跟insert into一样,只是在判断到有相同的数据之后直接跳过,不更新也不删除插入,如上面语句的意思就是如果插入到的表中有1001这条数据的话,那么就直接跳过,不作任何操作

有关on dunplicate key update 会出现的锁问题:
https://blog.csdn.net/pml18710973036/article/details/78452688

posted @   caibaotimes  阅读(139)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示
CONTENTS