博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
insert ignore 和DUPLICATE KEY UPDATE 和 LAST_INSERT_ID(id) 赏析
阅读量:6898 次
发布时间:2019-06-27

本文共 1179 字,大约阅读时间需要 3 分钟。

hot3.png

 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会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

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表示,如果中已经存在相同的记录,则忽略当前新数据;

转载于:https://my.oschina.net/guoenzhou/blog/1535796

你可能感兴趣的文章
编码转化
查看>>
手写hashmap
查看>>
js实现阶乘和裴波那契数列的几种方式(闭包、递归)
查看>>
在IDEA中实战Git
查看>>
.Net文档图像处理工具包GdPicture.NET发布v14,提供最先进的PDF和文档成像技术
查看>>
网络地址转换NAT原理及应用
查看>>
返回json对象
查看>>
什么是Docker Volume?
查看>>
将文本文件转为html文件
查看>>
margin合并
查看>>
java学习思维导图
查看>>
数组取别名
查看>>
SQL--Advanced tutorials
查看>>
ubuntu一键安装LAMP 及一键卸载
查看>>
关于mysql数据库
查看>>
1、Intellij idea快捷键设置
查看>>
网页设计之字体和 CSS 调整
查看>>
纯键盘开发实战(Mouseless Programming)
查看>>
oracle闪回数据库在dataguard中的使用
查看>>
Android核心分析28篇,强烈推荐android初学者,android进阶者看看这个系列教程
查看>>