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、使用例子
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、使用例子:
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、使用例子:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~