美文网首页
【MySQL】MySQL插入相同数据后的处理(更新或忽略)

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

作者: Catke | 来源:发表于2019-05-10 15:18 被阅读0次

在实际的业务场景中,经常会遇到这样的需求:插入某条记录,但如果数据库中有这条记录的话那就作相应的处理(忽略或者更新),正常情况下需要程序分多个步骤去完成这样的需求,在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

参考:
https://blog.csdn.net/dazhi_100/article/details/50133757

相关文章

网友评论

      本文标题:【MySQL】MySQL插入相同数据后的处理(更新或忽略)

      本文链接:https://www.haomeiwen.com/subject/bhyaoqtx.html