一、插入与更新操作:

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;

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`)

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

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

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

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

根据主键进行更新操作

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

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

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

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

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

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

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`)

(2)、`name` ="鞋子"方式:

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

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`)

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

1、查询七天内数据:

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

2、删除七天外数据:

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

搜索

复制

11、ON DUPLICATE KEY UPDATE实现插入更新操作的更多相关文章

  1. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    转: ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql 本文为博主原创,转载请注明出处. 在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时 ...

  2. ON DUPLICATE KEY UPDATE重复插入时更新

    mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...

  3. mysql ON DUPLICATE KEY UPDATE重复插入时更新

    mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...

  4. MySQL on duplicate key update 批量插入并更新已存在数据

    业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

  5. mysql插入数据时 insert IGNORE、ON DUPLICATE KEY UPDATE、replace into

    转: mysql insert时几个操作DELAYED .IGNORE.ON DUPLICATE KEY UPDATE的区别 博客分类: mysql基础应用   mysql insert时几个操作DE ...

  6. mysql insert on duplicate key, update, ignore

    insert 语句中不能使用where,所以如果需要根据插入的数据在已有的数据库表是否重复做一些操作可以使用下面三种方法: 1. 使用insert,捕获duplicate错误 2. insert in ...

  7. mysql ON DUPLICATE KEY UPDATE、REPLACE INTO

    INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢?前提条件是这个表必须有一个唯一索引或主键 ...

  8. MySQL_插入更新 ON DUPLICATE KEY UPDATE

    平时我们在设计数据库表的时候总会设计 unique  或者 给表加上 primary key 的限制条件. 此时 插入数据的时候 ,经常会有这样的情况: 我们想向数据库插入一条记录: 若数据表中存在以 ...

  9. mysql 插入更新在一条sql ON DUPLICATE KEY UPDATE

    有时候需要进行数据操作的,如果有数据则更新数据, 没有数据则插入. 以往的做法是先查询,再根据查询结果进行判断,执行插入或更新操作 其实 有一种 ON DUPLICATE KEY UPDATE 语法, ...

  10. MYSQL主键存在则更新,不存在则插入的解决方案(ON DUPLICATE KEY UPDATE)

    经常我们使用的最简单的数据库操作就是数据的更新,删除和插入,对于批量删除和插入的方法相信大家都很清楚,那么批量更新估计有的人就不知道了,并且还有批量插入,在插入时若有主键冲突则更新的操作,这在EAV模 ...

随机推荐

  1. PHP全栈开发(八):CSS Ⅲ background

    设置背景颜色: div { background-color:#b0c4de; } 不仅可以给body标签设置背景颜色,还能给p,div,h标签设置背景颜色 设置背景图片: body { backgr ...

  2. 洛谷P2168 [NOI2015] 荷马史诗 (哈夫曼树)

    学了哈夫曼树这道题还是好想的,基本上和构造哈夫曼树的思路一样,但是题目要求最长si的最小值,所以用两个关键字的堆,第一关键字是把出现次数作为权值,第二关键字表示从该节点开始的最长长度,权值相同时,选择 ...

  3. 自己动手写ls命令——Java版

    自己动手写ls命令--Java版 介绍 在前面的文章Linux命令系列之ls--原来最简单的ls这么复杂当中,我们仔细的介绍了关于ls命令的使用和输出结果,在本篇文章当中我们用Java代码自己实现ls ...

  4. How to Create DLL(Dynamic link library)

    该文章属于在YouTube视频上看到的,链接如下: https://www.youtube.com/watch?v=EmDJsl7C9-k&t=3s 1.创建一个工程并建立一个控制台程序 2. ...

  5. ifram父页面、子页面元素及方法的获取调用

    page1 父页面 <div id="ifram" class="parent1"> <iframe frameborder="0& ...

  6. 驱动开发:内核枚举Minifilter微过滤驱动

    Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...

  7. 测试Thread中的常用方法:

    测试Thread中的常用方法:start():启动当前线程:调用当前线程的run()run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中currentThread ...

  8. JavaScript基础&实战(2)js中的强制类型转换、运算符、关系运算符、逻辑运算符、条件运算符

    文章目录 1.强制类型转换Number 1.1 代码 1.2 测试结果 2.进制表示 2.1 代码 2.2 测试结果 3.强制类型转换为Boolea 3.1 代码 3.2 测试结果 4.运算符 4.1 ...

  9. Codeforces Round #829 (Div. 1/Div. 2) 1753 A B C D 题解

    Div1A / 2C. Make Nonzero Sum 令最后每个\(a_i\)的系数为\(c_i\)(\(c_i=1/-1\)),发现只要满足\(c_1=1\)(下标从1开始),且c中没有两个-1 ...

  10. MySQL高可用集群MHA方案

    MySQL高可用集群MHA方案 爱奇艺在用的数据库高可用方案 MHA 是目前比较成熟及流行的 MySQL 高可用解决方案,很多互联网公司正是直接使用或者基于 MHA 的架构进行改造实现 MySQL 的 ...