Mysql如何实现不存在则插入,存在则更新
作者:fukaiit 时间:2024-01-26 11:13:54
数据准备
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的。
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的区别。
无论是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。
来源:https://blog.csdn.net/fukaiit/article/details/85039159
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python采集情感音频的实现示例
![](https://img.aspxhome.com/file/2023/6/75076_0s.png)
PHP接口多继承及tarits实现多继承效果的方法
python中pd.Series()函数的使用
![](https://img.aspxhome.com/file/2023/3/134993_0s.png)
Python random模块的使用示例
详解Python流程控制语句
诊断SQLSERVER问题常用的日志概述及使用
![](https://img.aspxhome.com/file/2023/9/92789_0s.jpg)
利用Python获取赶集网招聘信息前篇
python人工智能算法之决策树流程示例详解
PDO::commit讲解
一种弹出提示信息时页面背景色调改变的方法
在Python程序员面试中被问的最多的10道题
利用python实现冒泡排序算法实例代码
![](https://img.aspxhome.com/file/2023/2/90522_0s.png)
浅谈SQL Server 对于内存的管理[图文]
![](https://img.aspxhome.com/file/2023/5/86885_0s.jpg)
Python闭包之返回函数的函数用法示例
![](https://img.aspxhome.com/file/2023/5/101195_0s.png)
nginx搭建基于python的web环境的实现步骤
![](https://img.aspxhome.com/file/2023/7/61687_0s.png)
python如何统计序列中元素
手把手教你搭建ES6的开发运行环境
![](https://img.aspxhome.com/file/2023/4/136214_0s.png)
python模块中判断全局变量的赋值的实例讲解
Pandas 多进程处理数据提高速度
![](https://img.aspxhome.com/file/2023/0/105760_0s.png)
Python针对给定列表中元素进行翻转操作的方法分析
![](https://img.aspxhome.com/file/2023/7/124997_0s.png)