11、ON DUPLICATE KEY UPDATE实现插入更新操作

一、插入与更新操作:

MySQL中,采用ON DUPLICATE KEY UPDATE语句对不存在的数据进行INSERT插入操作,对已存在的数据进行UPDATE更新操作;

总结:

1、ON DUPLICATE KEY UPDATE语句根据主键或唯一键来判断当前插入是否已存在。

2、记录已存在时,只会更新ON DUPLICATE KEY UPDATE语句之后指定的字段。

3、如果同时传递了主键和唯一键,以主键为判断存在依据,唯一键字段内容可以被修改。

注:(uuid为主键,name为唯一索引)

CREATE TABLE demo (
  uuid varchar(64) NOT NULL COMMENT '设备id',
  name varchar(255) NOT NULL COMMENT '主机名',
  code varchar(255) DEFAULT NULL COMMENT '设备用途',
  PRIMARY KEY (uuid) USING BTREE,
  UNIQUE KEY name (name) USING BTREE COMMENT '唯一索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

11、ON DUPLICATE KEY UPDATE实现插入更新操作

1、当INSERT语句存在主键或者唯一索引的列:

当INSERT语句存在主键或者唯一索引的列时,ON DUPLICATE KEY UPDATE语句根据主键ID或唯一索引来判断当前插入是否已存在,若已存在时,只会更新ON DUPLICATE KEY UPDATE之后限定的字段

(1)、INSERT中仅根据主键方式:

根据主键进行更新操作

INSERT INTO demo(uuid, code) VALUES ('1', '35')
ON DUPLICATE KEY UPDATE
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

(2)、INSERT中仅根据唯一索引方式:

根据唯一索引进行更新操作

INSERT INTO demo( name, code) VALUES ( '桌子', '80')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

(3)、INSERT中主键存在相同,唯一索引不同:

根据主键进行更新操作

INSERT INTO demo( uuid,name, code) VALUES ( "2",'凳子', '50')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

(4)、INSERT中唯一索引存在相同,主键不同:

即不插入也不更新(存在唯一键冲突)

2、当INSERT语句不存在主键或者唯一索引的列:

当INSERT语句不存在主键或者唯一索引的列时,仅执行插入操作

INSERT INTO demo( uuid,name, code) VALUES ( "3",'裤子', '80')
ON DUPLICATE KEY UPDATE
name = VALUES(name),
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

3、ON DUPLICATE KEY UPDATE之后没有使用VALUES的情况:

(1)、name = name方式:

保持数据库原值,不进行更新操作

INSERT INTO demo( uuid,name, code) VALUES ( "3",'衣服', '80')
ON DUPLICATE KEY UPDATE
name = name,
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

(2)、name =”鞋子”方式:

INSERT INTO demo( uuid,name, code) VALUES ( "3",'衣服', '80')
ON DUPLICATE KEY UPDATE
name = "鞋子",
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

4、ON DUPLICATE KEY UPDATE与WHERE方式同时实现:

对设备进行更新操作时,有时需要判断某字段在满足某种情况才能执行更新

故可采用:

#方式一
INSERT INTO  demo( uuid,name, code) VALUES ( "3",'衣服', '50')
ON DUPLICATE KEY UPDATE
name = IF( name = "鞋子", "电器", name ),
code = VALUES(code)

#方式二
INSERT INTO  demo( uuid,name, code) VALUES ( "3",'衣服', '50')
ON DUPLICATE KEY UPDATE
name = IF( code = "80", "电器", name ),
code = VALUES(code)

11、ON DUPLICATE KEY UPDATE实现插入更新操作

二、MySQL保留七天数据方式:

1、查询七天内数据:

SELECT * FROM table_info t where TO_DAYS(NOW())-TO_DAYS(t.create_time)

2、删除七天外数据:

DELETE FROM table_info t where TO_DAYS(NOW())-TO_DAYS(t.create_time)>7;

搜索

复制

Original: https://www.cnblogs.com/Iven-L/p/16571911.html
Author: 爱文(Iven)
Title: 11、ON DUPLICATE KEY UPDATE实现插入更新操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575707/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 单点登录(SSO)

    1 基础知识 单点登录机制(SSO)允许用户登录应用程序一次,并访问所有相关的系统,而不需要单独登录它们。 由于 SSO,用户只需登录一次即可使用服务,并自动登录到所有相关应用程序…

    数据库 2023年6月14日
    0161
  • Redis学习

    Redis 因为没有指定配置文件 需配置 redis-server redis.windows.conf 之后自动启动 测试性能 redis-benchmark -p 6379 -…

    数据库 2023年6月16日
    077
  • jQuery基础

    作者导言: 引用偶像刘德华的一句话 “学到的就要教人,赚到的就要给人”! 以下是关联的web前端基础知识文章,通过这些文章,您既可以系统地学习和了解这些知识…

    数据库 2023年6月14日
    094
  • Java8Stream流

    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以…

    数据库 2023年6月11日
    081
  • springmvc静态资源配置

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>o…

    数据库 2023年6月16日
    094
  • ASP.NET(AngelShop)基于多供应商外贸商城管理系统发布

    ============================================================================Angel工作室ASP.NE…

    数据库 2023年6月14日
    090
  • 5_SpringMVC

    一. 什么是MVC框架 MVC全名是Model View Controller, 是模型(model), 视图(view), 控制器(controller)的缩写, 一种软件设计典…

    数据库 2023年6月11日
    0101
  • 解决pycharm问题:module ‘pip’ has no attribute ‘main’

    Pycharm安装package出现如下报错: 找到安装目录下 helpers/packaging_tool.py文件,找到如下代码: 修改如下: Original: https:…

    数据库 2023年6月6日
    0276
  • Dubbo源码(八)-负载均衡

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)…

    数据库 2023年6月11日
    080
  • [Unity]如何将两个物体不留缝隙的精确贴合在一起

    比如说想让正方体精确贴合到墙上: 按住V,选中正方体,此时开启了 顶点吸附功能,正方体上的变换工具会变成以某个顶点为变换中心,如下图所示: 拖动中间的白色小方块,就会将正方体的该顶…

    数据库 2023年6月16日
    083
  • leetcode 235. Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先(简单)

    一、题目大意 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:”对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个…

    数据库 2023年6月16日
    0103
  • 第06章 MySQL多表查询

    第06章 MySQL多表查询 多表查询,也称为关联查询,是指两个或多个表一起完成查询操作。 [En] A multi-table query, also known as an a…

    数据库 2023年5月24日
    087
  • Linux_hadoop2.2.0伪分布式搭建安装

    1.1 开启网络,ifconfig指令查看ip 1.2 修改主机名为自己名字(hadoop)centos 7 连接:https://zhuanlan.zhihu.com/p/375…

    数据库 2023年6月11日
    0109
  • 索引的树结构

    二分查找 二叉树 二叉平衡树 B-TREE :二叉平衡树的基础上,使加载一次节点,可以加载更多路径数据,同时把查询范围缩减到更小 缺点:业务数据的大小可能远远超过了索引数据的大小,…

    数据库 2023年5月24日
    065
  • mapreduce统计单词个数

    WordCount类代码: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Pat…

    数据库 2023年6月11日
    091
  • kafka学习

    Kafka概述 Kafka是分布式(点对点模式)(发布-订阅模式)消息系统,由Scala 写成, 它主要用于处理流式数据。本质是基于消息队列缓存数据. Kafka对消息保存时根据T…

    数据库 2023年6月16日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球