文档章节

insert ignore 和DUPLICATE KEY UPDATE 和 LAST_INSERT_ID(id) 赏析

郭恩洲_OSC博客
 郭恩洲_OSC博客
发布于 2017/09/12 13:25
字数 546
阅读 10
收藏 0
点赞 0
评论 0

 SQL解析:今天在阅读openfalcon的query组件代码,对代码中一句SQL赏析。

Sql: insert ignore into tmp_graph (endpoints, counters, ck) values(?, ?, ?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id),time_=?
Sql: SELECT LAST_INSERT_ID()

Sql: insert ignore into tmp_graph (endpoints, counters, ck) values(?, ?, ?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id),time_=?
Sql: SELECT LAST_INSERT_ID()

【insert ignore】:如果中已经存在相同的记录,则忽略当前新数据;

【DUPLICATE KEY UPDATE】:如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行

【LAST_INSERT_ID(id)】:获取刚插入的数据主键ID

 

INSERT IGNORE 与INSERT INTO的区别

INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

eg: insert ignore into table(name)  select  name from table2 

 

mysql中常用的三种插入数据的语句:


insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;


replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。
 
insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;

© 著作权归作者所有

共有 人打赏支持
郭恩洲_OSC博客
粉丝 31
博文 228
码字总数 108631
作品 0
徐汇
技术主管
关于binlog的幂等性在mysql中的实现思路

因为binlog会有重复拉取的操作,那么如果后端存储是mysql,如何处理 看到微信推了一篇文章,先保存起来 MySQL处理插入过程中的主键唯一键重复值办法 2016-05-05 pursuer.chen 数据库开发 来自...

强子哥哥 ⋅ 2016/05/05 ⋅ 0

MYSQL无重复插入数据更新语法&sql一句话使insert时若主键重复则更新

我来说两句 收藏 我要投稿 MYSQL无重复插入数据更新语法&sql一句话使insert时若主键重复则更新 如果你指定了ON DUPLICATE KEY UPDATE命令语句,那么在唯一索引或者主索引的作用下将不插入与数...

碧海潮生曲 ⋅ 2013/03/02 ⋅ 0

MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新

如果你指定了ON DUPLICATE KEY UPDATE命令语句,那么在唯一索引或者主索引的作用下将不插入与数据库记录重复的内容,但同时会更新数据库中的旧记录。例如,字段a被声明为唯一索引并且里面只包...

idea_biu ⋅ 2012/07/02 ⋅ 0

mysql存在则更新,不存在则插入

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

LCZ777 ⋅ 2015/09/22 ⋅ 0

mysql insert语法注意事项(ON DUPLICATE KEY UPDATE )

mysql insert语法注意事项(ON DUPLICATE KEY UPDATE ) INSERT语法 一、DELAYED 使用延迟插入操作 DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操作到达的时候,服务器把数据行放入...

vga ⋅ 2014/09/25 ⋅ 0

Mysql使用总结

1. Sql 1.1.1 插入insert的使用 1.insert ignore into 1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问...

hellooworld ⋅ 2016/10/24 ⋅ 0

Mysql 原生语句中save or update 的各种写法

Mysql 原生语句中save or update 的各种写法 背景   在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。如果使用Hibernate,它...

Tek_Eternal ⋅ 2015/02/09 ⋅ 0

那些年我们一起追过的稀奇古怪的SQL

很久没写博客了,快过年了,今天工作比较轻松,晚上把之前的一些积累的东西整理一下 文章的题目是我的一个小分享,主要是收集了一些不太常用的sql语法。打算之后做一个oracle的姊妹篇。 ADEL...

王小明123 ⋅ 2013/02/05 ⋅ 8

mybatis 执行 INSERT … ON DUPLICATE KEY UPDATE

mybatis 在执行 INSERT … ON DUPLICATE KEY UPDATE 格式的语句的时候 没有报错,库表也没插入数据,数据库是mysql 用mysql客户端执行这条语句的时候却是能插入的 是因为myBatis不支持吗? ...

monologu ⋅ 2015/03/13 ⋅ 7

Mysql中Insert into xxx on duplicate key update问题

一,on duplicate key update 在看代码的过程中碰到了这一用法,不太理解,google了一下。它的意义其实是如果在insert语句末尾制定了on duplicate key update语句的话,则当插入行会导致一个...

君满楼001 ⋅ 2017/11/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 30分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 49分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 57分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部