博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[原] insert into … on duplicate key update / replace into 多行数据
阅读量:6173 次
发布时间:2019-06-21

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

场景是这样的,我有KV型的表,建表语句如下:

CREATE TABLE `dkv` (  `k1` int(11) NOT NULL DEFAULT '0',  `k2` int(11) NOT NULL DEFAULT '0',  `val` varchar(30) DEFAULT NULL,  PRIMARY KEY (`k1`,`k2`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

数据大概是这样的:

+----+----+-----------+| k1 | k2 | val       |+----+----+-----------+|  1 |  1 | value 1-1 ||  1 |  2 | value 1-1 ||  1 |  3 | value 1-1 ||  1 |  5 | value 1-1 ||  1 |  7 | value 1-1 |+----+----+-----------+

当我插入一条数据时,我要判断(k1,k2)是否已经存在(1条selete),若存在就update,不存在就insert,这是一个典型的merge过程,虽然按照PK执行操作的速度非常快,但是毕竟SQL交互量上去了,如果我有100笔这样的SQL,那这个开销是很可观的,有没有什么一条SQL就能搞定的事情呢?

有两种写法:

第一种: insert into … on duplicate key update

insert DELAYED into dkv values (1,2,'new 12a'),(1,3,'new 33ba'),(1,4,'new 23222'),(1,6,'new 12333'),(1,8,'new vaaaa'),(1,20,'new vaff'),(1,25,'new vaff')ON DUPLICATE KEY UPDATE val=VALUES(val);

第二种 replace into:

replace into dkv values (1,2,'new 12a'),(1,3,'new 33ba'),(1,4,'new 23222'),(1,6,'new 12333'),(1,8,'new vaaaa'),(1,20,'new vaff'),(1,25,'new vaff');

最终都能将数据改成这样:

+----+----+-----------+| k1 | k2 | val       |+----+----+-----------+|  1 |  1 | value 1-1 ||  1 |  2 | new 12a   ||  1 |  3 | new 33ba  ||  1 |  4 | new 23222 ||  1 |  5 | value 1-1 ||  1 |  6 | new 12333 ||  1 |  7 | value 1-1 ||  1 |  8 | new vaaaa ||  1 | 20 | new vaff  ||  1 | 25 | new vaff  |+----+----+-----------+

转载地址:http://sttba.baihongyu.com/

你可能感兴趣的文章
【学术信息】中科院2019年学术期刊分区-综合性期刊
查看>>
ShareObject离线存储相关
查看>>
C++ XML
查看>>
windows批处理 打开exe后关闭cmd
查看>>
Flask开发系列之快速入门
查看>>
关于SaveChanges
查看>>
php7扩展开发 一 获取参数
查看>>
处女座与复读机
查看>>
Laravel 5.2数据库--迁移migration
查看>>
ExtJs Extender controls 不错的例子
查看>>
html的基础知识
查看>>
Mybatis Sql片段的应用
查看>>
突发奇想20150126
查看>>
Nginx + CGI/FastCGI + C/Cpp
查看>>
学习笔记------jsp页面与jsp标记
查看>>
DS博客作业02--线性表
查看>>
第三届ACM山东省赛I题_Chess_STL
查看>>
jQuery each和js forEach用法比较
查看>>
前端笔记-作用域链的一些理解加记录(JS高级程序设计读书笔记1)
查看>>
改造你的网站,变身 PWA
查看>>