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


猜你喜欢
- 装饰器模式(Decorator Pattern)是什么装饰器模式是一种结构型模式,它允许你在运行时为一个对象动态地添加新的行为,而不影响其原
- 一、简单介绍pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装和卸载的功能,现在大家用到的所有包不是自带
- 本文实例讲述了php+Memcached实现简单留言板功能。分享给大家供大家参考,具体如下:MyPdo.php<?phpclass M
- 1.javascript获取网址"?"后面的参数:var query = window.location.search.
- 在介绍ensure内部的实现之前,让我们先来看看其功能: ensure({ html: "popup.html", ja
- 有一次去超市换货,本能的找到服务中心,服务中心说这个业务在超市旁边一个房间里,由于忘记带小票,那个小房间的人让我去另外一个小房间调电脑里的记
- 区域(Area)是一个 ASP.NET MVC 功能,用于将相关功能组织为一个单独的命名空间(用于路由)和文件结构(用于视图)。使用区域通过
- 目前我使用到的python中执行cmd的方式有三种使用os.system("cmd")
- swoole —— 重新定义PHPswoole 的进程之间有两种通信方式,一种是消息队列(queue),另一种是管道(pipe),对swoo
- gdal安装方式一:在网址 https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 下载对应pyt
- 数据库管理系统中并发控制的任务是确保在多个事务同时存取数据库中同一数据不破坏事务的隔离性和统一性以及数据库的统一性乐观锁和悲观锁式并发控制主
- SQL Server 阻止了对组件 'Ad Hoc Distributed&nbs
- 本文实例讲述了Python实现的圆形绘制。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#! python3i
- 条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。1. 竖放条形
- 本文实例为大家分享了python批量处理图片的具体代码,供大家参考,具体内容如下公司的一个项目要求把所有4096x4096的图片全部转化成2
- 先来思考一个问题,B站一个视频的弹幕最多会有多少?比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的。也就是
- 本文实例为大家分享了python pygame模块编写飞机大战的具体代码,供大家参考,具体内容如下该程序没有使用精灵组,而是用列表存储对象来
- 给一个例子 :# -*- coding: utf-8 -*-import matplotlib.pyplot as plt im
- 很久没有上过天极网,今天偶然兴起跑上去看了一下,看到消息说天极网深圳站隆重上线,于是也顺便去溜了一把,打开页面的时候差点有种不知所措的感觉,
- 前言前期误操作,导致数据库表删除,虽然数据量不多,但是通过binlog恢复比较麻烦,通过备份文件来恢复,备份文件达36个G打开都是问题;使用