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 相关文章推荐
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MySQL优化及索引解析
Mar 17 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
关于mysql中string和number的转换问题
Jun 14 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
详解MySQL的内连接和外连接
May 08 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入门学习的几个不错的实例代码
2008/07/13 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
keras 权重保存和权重载入方式
2020/05/21 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
2015年煤矿工作总结
2015/04/28 职场文书