文档章节

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

郭恩洲_OSC博客
 郭恩洲_OSC博客
发布于 2017/09/12 13:25
字数 546
阅读 12
收藏 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博客
粉丝 33
博文 241
码字总数 112715
作品 0
徐汇
高级程序员
关于binlog的幂等性在mysql中的实现思路

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

强子哥哥
2016/05/05
273
0
MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新

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

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

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

碧海潮生曲
2013/03/02
0
0
mysql存在则更新,不存在则插入

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

LCZ777
2015/09/22
4.6K
0
Mysql使用总结

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

hellooworld
2016/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
15
4
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部