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 8.0.15 winx64安装配置方法图文教程

    mysql 8.0.15 winx64安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.15 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • mysql安装图解 mysql图文安装教程(详细说明)

    mysql安装图解 mysql图文安装教程(详细说明)

    很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明。
    2010-06-06
  • 干掉一堆mysql数据库,仅需这样一个shell脚本(推荐)

    干掉一堆mysql数据库,仅需这样一个shell脚本(推荐)

    这篇文章主要介绍了干掉一堆mysql数据库,仅需这样一个shell脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL中的存储过程异常处理

    MySQL中的存储过程异常处理

    这篇文章主要介绍了MySQL中的存储过程异常处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 计算机二级考试MySQL常考点 8种MySQL数据库设计优化方法

    计算机二级考试MySQL常考点 8种MySQL数据库设计优化方法

    这篇文章主要为大家详细介绍了计算机二级考试MySQL常考点,详细介绍8种MySQL数据库设计优化方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 关于 MySQL 嵌套子查询中无法关联主表字段问题的解决方法

    关于 MySQL 嵌套子查询中无法关联主表字段问题的解决方法

    这篇文章主要介绍了关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • SQL实现数据过滤流程详解

    SQL实现数据过滤流程详解

    这篇文章主要介绍了SQL实现数据过滤流程,当我们在SQL中查询数据时,肯定是有一些数据是我们不需要的,所以我们此时就要对数据进行过滤,以筛选出我们仅需要的数据
    2023-01-01
  • 论一条select语句在MySQL是怎样执行的

    论一条select语句在MySQL是怎样执行的

    本文将建立一套建立一套MySQL的知识框架,通过讨论select语句在MySQL是怎样执行的来展开内容,感兴趣的小伙伴一起来看下文吧
    2021-08-08
  • 浅谈MySQL的性能优化

    浅谈MySQL的性能优化

    这篇文章主要介绍了浅谈MySQL的性能优化,MySQL性能优化是通过对数据库的配置、查询优化以及索引优化等手段提高数据库的响应速度和处理能力,本文从多个层面对mysql性能优化进行了小结,需要的朋友可以参考下
    2023-08-08
  • CentOs7.x安装Mysql的详细教程

    CentOs7.x安装Mysql的详细教程

    CentOS7的yum源中默认好像是没有MySQL的。为了解决这个问题,我们要先下载mysql的repo源。下面通过本教程给大家详细介绍CentOs7.x安装Mysql的方法,一起看看吧
    2016-12-12

最新评论