Mysql如何实现不存在则插入,存在则更新


Posted in MySQL onMarch 25, 2022

数据准备

Mysql如何实现不存在则插入,存在则更新

ON DUPLICATE KEY UPDATE

insert into test_table(id,username)
VALUES(4,'fukaiit')
ON DUPLICATE KEY UPDATE username='fukaiit'

执行如上sql,该id不存在(此处id不存在,指的是id为X的记录不存在,包括主键、unique索引列等情况),相当于执行了insert部分,普通插入,受影响的行:1。

insert into test_table(id,username)
VALUES(1,'fukaiit')
ON DUPLICATE KEY UPDATE username='fukaiit'

执行如上sql,该id已存在,相当于执行了update部分,受影响的行:2。

执行结果如下,注意只是更新username,是保留了email的。

Mysql如何实现不存在则插入,存在则更新

REPLACE INTO … VALUES…

REPLACE INTO test_table(id,username)
VALUES(5,'fukaiit');

执行如上sql,该id不存在,相当于执行了insert,普通插入,受影响的行:1。

REPLACE INTO test_table(id,username)
VALUES(1,'fukaiit');

执行如上sql,该id已存在,相当于执行了删除再插入的操作,受影响的行:2。

执行结果如下,注意删除后再插入是没有email值的,所以此时email为null,注意与ON DUPLICATE KEY UPDATE的区别。

Mysql如何实现不存在则插入,存在则更新

无论是insert on duplicate key update还是replace into,在插入时MySQL返回的影响行数就是插入的记录数,但是在更新时返回的影响行数是更新行数*2。

INSERT IGNORE INTO … VALUES…

INSERT IGNORE INTO test_table(id,username) 
values(6,'fukaiit');

执行如上sql,该id不存在,相当于执行了insert,普通插入,受影响的行:1。

INSERT IGNORE INTO test_table(id,username) 
values(1,'fukaiit_new');

执行如上sql,该id已存在,忽略了该插入操作,数据没有变化,受影响的行:0。

使用DUAL虚表和NOT EXISTS

该方法与INSERT IGNORE INTO ... VALUES...方法的效果相同。

INSERT INTO test_table(id,username)
SELECT 7,'fukaiit' from DUAL 
where NOT EXISTS (select * from test_table where id=7);

执行如上sql,该id不存在,select子句返回结果集为空,NOT EXISTS成立,相当于执行了insert,普通插入,受影响的行:1。

INSERT INTO test_table(id,username)
SELECT 2,'fukaiit' from DUAL 
where NOT EXISTS (select * from test_table where id=2);

执行如上sql,该id已存在,select子句返回结果集不为空,NOT EXISTS不成立,则未执行插入操作,数据没有变化,受影响的行:0。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

MySQL 相关文章推荐
MySQL Router的安装部署
Apr 24 MySQL
MySQL数据迁移相关总结
Apr 29 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 MySQL
MySQL插入数据与查询数据
mysql insert 存在即不插入语法说明
Mar 25 #MySQL
MySQL创建表操作命令分享
mysql数据插入覆盖和时间戳的问题及解决
MySQL实战记录之如何快速定位慢SQL
Mar 23 #MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 #MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 #MySQL
You might like
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Python生成器generator用法示例
2018/08/10 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python3.4中清屏的处理方法
2020/07/06 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
斯福泰克软件测试面试题
2015/02/16 面试题
计算机专业毕业生求职信
2014/04/30 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
Python中for后接else的语法使用
2021/05/18 Python