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

作者:fukaiit 时间:2024-01-26 11:13:54 

数据准备

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。

来源:https://blog.csdn.net/fukaiit/article/details/85039159

标签:Mysql,不存在,插入,存在,更新
0
投稿

猜你喜欢

  • Python采集情感音频的实现示例

    2023-06-11 23:17:10
  • PHP接口多继承及tarits实现多继承效果的方法

    2023-11-21 04:23:33
  • python中pd.Series()函数的使用

    2023-10-04 08:28:05
  • Python random模块的使用示例

    2023-08-01 16:33:48
  • 详解Python流程控制语句

    2021-05-15 08:25:45
  • 诊断SQLSERVER问题常用的日志概述及使用

    2024-01-14 04:38:16
  • 利用Python获取赶集网招聘信息前篇

    2021-09-23 12:53:36
  • python人工智能算法之决策树流程示例详解

    2022-02-27 17:34:31
  • PDO::commit讲解

    2023-06-14 05:35:45
  • 一种弹出提示信息时页面背景色调改变的方法

    2008-12-01 12:22:00
  • 在Python程序员面试中被问的最多的10道题

    2022-02-27 08:20:03
  • 利用python实现冒泡排序算法实例代码

    2021-06-29 17:00:14
  • 浅谈SQL Server 对于内存的管理[图文]

    2024-01-14 07:41:44
  • Python闭包之返回函数的函数用法示例

    2022-12-09 18:50:41
  • nginx搭建基于python的web环境的实现步骤

    2023-07-27 07:06:49
  • python如何统计序列中元素

    2022-03-04 16:32:16
  • 手把手教你搭建ES6的开发运行环境

    2024-04-18 09:46:55
  • python模块中判断全局变量的赋值的实例讲解

    2021-01-05 13:29:37
  • Pandas 多进程处理数据提高速度

    2021-12-11 17:30:51
  • Python针对给定列表中元素进行翻转操作的方法分析

    2022-04-19 18:37:07
  • asp之家 网络编程 m.aspxhome.com