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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月11日 21时35分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python 数据科学 - 【分类模型】 ☞ 逻辑回归
2019-04-27
python 数据科学 - 【分类模型】 ☞ 稳健滴 SVM 支持向量机
2019-04-27
python - selenium 处理 alert
2019-04-27
Java - Set、List、Map
2019-04-27
Java - OnlyLady Spider(HttpClient 4.5 )
2019-04-27
Math - 高斯分布(正态分布)
2019-04-27
android学习笔记----简易音乐播放器原理
2019-04-27
Unity编辑器扩展——标签属性Attribute
2019-04-27
Unity中实现拖拽操作
2019-04-27
Unity中的UGUI事件系统
2019-04-27
C#中的常量
2019-04-27
C#中的静态变量与非静态变量
2019-04-27
C#中的ref、out、params关键字
2019-04-27
C#中的多态性
2019-04-27
C#中的命名空间
2019-04-27
设计模式——状态模式
2019-04-27
设计模式——工厂模式
2019-04-27
Unity中实现有限状态机FSM
2019-04-27
Unity中实现反弹
2019-04-27