Mysql插入数据:不存在则插入,存在则跳过或更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql插入数据:不存在则插入,存在则跳过或更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2648字,纯文字阅读大概需要4分钟。
内容图文
![Mysql插入数据:不存在则插入,存在则跳过或更新](/upload/InfoBanner/zyjiaocheng/522/8807bbc0d5ff4a3897746ad57edc2bf2.jpg)
一般情况下我们会写两条sql去操作
select 查询当前插入的数据是否已经存在如果不存在就插入新的记录,如果存在就提示用户该记录已经存在在mysql里面可以这么操作,如果记录存在就跳过或者更新,不存在就插入!
IGNORE
这个是根据插入表的主键和唯一索引去匹配的,如果当前插入的记录存在则跳过不插入。
示例:
INSERT IGNORE INTO `user` (‘phone‘) VALUES (‘18888888888‘);
此时user表中phone字段是唯一的,如果有这条记录则不执行插入操作,如果出现重复数据,将不返回错误,只是以警告形式返回。
on duplicate key update
主键或者唯一索引有重复时,则执行update操作
示例:
假设有一张表,id为主键,并且表中已经存在了id=1,likes=5的记录,此时下面两条sql等价。
INSERT INTO TABLENAME (id,likes) VALUES (1,18) ON DUPLICATE KEY UPDATE likes=likes+1;
UPDATE TABLENAME SET likes=likes+1 WHERE id=1;
如果是插入值,返回受影响行数为1,如果执行了更新操作那么返回的受影响行数为2.
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125238668.jpg)
如果条件是针对于主键操作的,那么此操作是无效操作,等同于ignore
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125238947.jpg)
如果一次性插入多条记录,此时id为主键,或者a是一个unique索引,并且表中已经存在id=1,likes=3的记录。
INSERT INTO TABLENAME (id,likes) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE likes = likes+1;
执行后likes的值为变成5,因为在插入前已经存在了id=1的记录,上面的sql等于执行了两条update语句。
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125239112.jpg)
NOTE:INSERT INTO TABLENAME……ON DUPLICATE KEY UPDATE……,这样的sql中,假如插入的记录在表中一种有重复值(与主键、唯一索引匹配),那么则会执行update操作,如果在插入的时候表中没有重复值,那么就会执行insert操作。
问题:现在问题来了,如果INSERT多行记录, ON DUPLICATE KEY UPDATE后面字段的值怎么指定?要知道一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE,到底他会更新一行记录,还是更新所有需要更新的行。这个问题困扰了我很久了,其实使用VALUES()函数一切问题都解决了。
如果表中已经有id=1,likes=18 ;id=2,likes=19的两条记录,如果插入语句中有id=1或者id=2的记录,则更新原有记录,否则插入新行。
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125239251.jpg)
最后强调一下:
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
INSERT……SELECT……WHERE NOT EXISTS
NOTE:根据查询条件判断是否已经有对应的值,有的话跳过,没有的话执行插入,随便想查什么就查什么,这个用得最多。
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125239416.jpg)
REPLACE INTO
如果存与主键或者唯一索引相同的记录,那么则会先删除,然后在插入新记录。
![Mysql插入数据:不存在则插入,存在则跳过或更新 - 文章图片](/upload/getfiles/0001/2021/4/25/20210425125239533.jpg)
注意:如果有两个主键或者唯一索引,必须要值全部匹配才会执行替换操作,否则执行插入操作,详情见官网。
MySQL对REPLACE(和 LOAD DATA ... REPLACE)使用以下算法 :
尝试将新行插入表中插入失败,因为主键或唯一索引发生重复键错误:从表中删除具有重复键值的冲突行再次尝试将新行插入表中
Mysql插入数据:不存在则插入,存在则跳过或更新
标签:insert 插入 根据 duplicate 影响 情况 phone com 需要
本文系统来源:https://www.cnblogs.com/zhang-cb/p/12746320.html
内容总结
以上是互联网集市为您收集整理的Mysql插入数据:不存在则插入,存在则跳过或更新全部内容,希望文章能够帮你解决Mysql插入数据:不存在则插入,存在则跳过或更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。