mysql replace into 与 insert into on duplicate key update、insert ignore、insert into

replace into 与 insert into on duplicate key update 的使用和不同点

mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点
参考URL: cnblogs.com/jkko123/p/7285641.html

replace into和insert into on duplicate key update都是为了解决我们平时的一个问题
就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录。

replace into会首先尝试先往表里面插入记录,因为我们的ID是主键,不可重复,显然这条记录是无法插入成功的,然后replace into会把这条已存在的记录删掉,然后再插入,所以会显示影响行数是2。

但是有些时候我们的需求是,如果记录存在则更新指定字段的数据,原有字段数据仍保留。

执行如下语句:

INSERT INTO test (id, name)
VALUES(2, 'bb')
ON DUPLICATE KEY
UPDATE
name = VALUES(name);

VALUES(字段名)表示获取当前语句insert的列值,VALUES(name)表示的就是’bb’

insert into on duplicate key update语句的做法是先插入记录,如果不成功,则更新记录,但是为什么影响的行数是2?

显然如果insert into on duplicate key update语句仅仅只是在原记录基础上进行更新操作的话,自增字段是不会自动加1的,说明它也进行了记录删除操作。

先插入记录,如果不成功,则删除原记录,但保留了除update语句后字段的值,然后把保留的值与需要更新的值合并,然后插入一条新记录。

总结:
replace into 与 insert into on duplicate key update都是先尝试插入记录,如果不成功,则删除记录,replace into不保留原记录的值,而insert into on duplicate key update保留。然后插入一条新记录。

replace into的用法以及与inset into、insert ignore的区别

mysql中常用的三种插入数据的语句:

  • insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;
  • replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
  • insert ignore表示,如果已存在,就不会进行插入,跳过这个

在向表中插入数据时,我们经常会遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,

  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
  2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

replace into 和insert ignore是基于唯一索引或主键基础上使用的。

replace into和insert ignore into 与insert into区别:

  • replace into和insert ignore into 与insert into区别在于insert into插入与主键相同记录会报错而前者不会。

INSERT IGNORE 与INSERT INTO的区别:

  • INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值