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

 更新时间:2013年08月11日 13:49:22   作者:  
当我插入一条数据时,我要判断(k1,k2)是否已经存在(1条selete),若存在就update,不存在就insert

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

相关文章

  • mysql中索引与FROM_UNIXTIME的问题

    mysql中索引与FROM_UNIXTIME的问题

    这篇文章主要介绍了mysql中索引与FROM_UNIXTIME的问题的相关资料,需要的朋友可以参考下
    2017-05-05
  • MySQL存储过程中变量的定义以及应用详解

    MySQL存储过程中变量的定义以及应用详解

    MySQL变量定义和应用是我们经常会遇到的问题,下面这篇文章主要给大家介绍了关于MySQL存储过程中变量的定义以及应用的相关资料,文章通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL使用GROUP BY分组查询

    MySQL使用GROUP BY分组查询

    GROUP BY关键字可以根据一个或多个字段对查询结果进行分组,本文主要介绍了MySQL使用GROUP BY分组查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • MySQL时间溢出原理、影响与解决方案

    MySQL时间溢出原理、影响与解决方案

    本文将手把手带您了解mysql时间溢出原理、实战影响与全面解决方案,所有代码均通过dblens for mysql数据库工具验证,推荐使用该工具进行可视化数据库管理和开发,感兴趣的小伙伴跟着小编一起来看看吧
    2025-03-03
  • Oracle更换为MySQL遇到的问题及解决

    Oracle更换为MySQL遇到的问题及解决

    前段时间自行安装MySQL8.0数据库,为数据库去Oracle做准备。现在公司正规划搭建MySQL集群。于是挑选两个应用,进行改造测试,积累下经验。
    2021-05-05
  • mysql alter table修改表命令整理

    mysql alter table修改表命令整理

    这篇文章主要介绍了mysql alter table修改表命令整理的相关资料,需要的朋友可以参考下
    2016-10-10
  • MySQL针对Discuz论坛程序的基本优化教程

    MySQL针对Discuz论坛程序的基本优化教程

    这篇文章主要介绍了MySQL针对Discuz论坛程序的基本优化教程,包括在缓存和索引等方面的优化方法,需要的朋友可以参考下
    2015-11-11
  • mysql如何取分组之后最新的数据

    mysql如何取分组之后最新的数据

    开发中经常会遇到,分组查询最新数据的问题,下面这篇文章主要给大家介绍了关于mysql如何取分组之后最新的数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL的增删查改语句用法示例总结

    MySQL的增删查改语句用法示例总结

    这篇文章主要介绍了MySQL的增删查改语句用法示例总结,是对MySQL学习的基本知识点的一个归纳,需要的朋友可以参考下
    2015-05-05
  • MySQL定时器常用案例

    MySQL定时器常用案例

    这篇文章主要介绍了MySQL定时器的相关知识,本文结合使用案例给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论