Sql 语句的对比 -- REPLACE INTO 、 INSERT ON DUPLICATE KEY UPDATE 、 INSERT IGNORE INTO
发布日期:2021-06-20 05:37:31 浏览次数:17 分类:技术文章

本文共 1060 字,大约阅读时间需要 3 分钟。

 

Sql 语句的对比

总结一下 REPLACE INTO 、 INSERT ON DUPLICATE KEY UPDATE 、 INSERT IGNORE INTO 这几种方式的区别。

INSERT IGNORE INTO

INSERT IGNORE INTO表示,如果中已经存在相同的记录,则忽略当前新数据eg:

连续执行两次以下语句(id为主键):

insert into t(id, update_time) values(1, now());
则会报错:`ERROR 1062 (23000): Duplicate entry '1' for key 1` 

如果加上 ignore 则不会报错:

insert ignore into t(id, update_time) values(1, now());

使用了ignore关键字,但是记录不会被覆盖,数据仍是第一次插入的结果。

replace into

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

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

replace into t(id, update_time) values(1, now());

 INSERT ON DUPLICATE KEY UPDATE

使用了ON DUPLICATE KEY UPDATE,如果插入会导致UNIQUE索引或PRIMARY KEY中出现重复值,则改为对其执行UPDATE方法。

如果再插入时唯一索引 a 重复,以下两句话等效:

INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE t1 SET c=c+1 WHERE a=1;

如果 b 也是唯一索引,那么相当于以下SQL:

UPDATE t1 SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

注意:后面增加了 LIMIT ,只会即使有多个唯一索引重复,耽误插入, ON DUPLICATE KEY UPDATE 只会更新一个。所以应该避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句

 

转载地址:https://blog.csdn.net/h2453532874/article/details/94899962 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:优雅的参数检验 — guava的Preconditions
下一篇:揭开面纱之-- js中的this

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月11日 21时35分58秒