当前位置:  数据库>mysql

insert into … on duplicate key update / replace into 多行数据介绍

    来源: 互联网  发布时间:2014-10-11

    本文导语:  场景是这样的,我有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 数据大概是这样的:...

场景是这样的,我有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  |
+----+----+-----------+

    
 
 

您可能感兴趣的文章:

  • sqlserver中向表中插入多行数据的insert语句
  • INSERT INTO .. ON DUPLICATE KEY更新多行记录
  • C++ Double Ended Queues 成员 insert():insert elements into the dequeue
  • mssql insert into 和insert into select性能比较
  • insert into select和select into的使用和区别介绍
  • select into与insert into的示例代码
  • sql="insert into fr0"+"values ('4','name');";怎么老有错误?
  • insert into table插入多条数据的例子
  • MySQL中REPLACE INTO和INSERT INTO的区别分析
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • select into 和 insert into select 两种表复制语句
  • select into与insert into select 表复制语句学习实例
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
  • SELECT INTO与INSERT INTO SELECT表复制语句实例分享
  • 解析SQL语句中Replace INTO与INSERT INTO的不同之处
  • stmt.executeUpdate("insert into st(st_id,st_name)values(st_id,st_name)");???
  • insert into 求解!
  • insert into tbl() select * from tb2中加入多个条件
  • MySql中使用INSERT INTO语句更新多条数据的例子
  • MySQL 关于表复制 insert into 语法的详细介绍
  • 解析MySQL中INSERT INTO SELECT的使用
  • PHP MySQL Insert Into用法
  • Mysql中Insert into xxx on duplicate key update问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )
  • MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
  • C++ MultiMaps 成员 insert():插入元素
  • 解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()
  • C++ Maps 成员 insert():插入元素
  • 急!!! JSP对数据库 INSERT 记录.....................HOLEN
  • C++ Lists(链表) 成员 insert():插入一个元素到list中
  • 如何在SELECT/INSERT...语句中加入变量?
  • C++ Double Ended Queues(双向队列) 成员 insert():插入一个元素到双向队列中
  • 为什么没有insert()方法?
  • java命名空间java.awt类event的类成员方法: insert定义及介绍
  • INSERT出的问题,谢谢
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert定义及介绍
  • insert问题(初学者)
  • java命名空间javax.accessibility接口accessibletablemodelchange的类成员方法: insert定义及介绍
  • php开源软件 iis7站长之家
  • C++ Vectors 成员 insert():插入元素到Vector中
  • 如何获的INSERT后的id(auto increment)的值?
  • java命名空间javax.swing.event类documentevent.eventtype的类成员方法: insert定义及介绍
  • 关于shell下面insert键失灵的解决办法
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert_rows定义及介绍
  • last_insert_id()准确吗?
  • java命名空间javax.swing.event类tablemodelevent的类成员方法: insert定义及介绍
  • sqlite的insert语句如何插入变量,问题解决,马上给分


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3