`
yuelangyc
  • 浏览: 448970 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql中批量更新的几种方式

阅读更多

        最近一直在云笔记中整理文章,看了博客发现去年一年只发了2个无关技术的文章,趁现在闲暇时间,将整理好的文章发过来,供大家参考,顺便提出宝贵意见。

 

    1、在处理大数据时,有时候会经常遇到大量的数据需要更新或插入,如何进行优化。 批量插入其实挺简单,只要用insert into 后面跟多个VALUES集合即可。

 

批量更新有两种方式,

 

    A、insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update aa=values(aa),bb=values(bb),cc=values(bb)+values(cc)

 

        a、更新操作,values后可跟多条记录,主键或唯一值存在,则按最后提供的规则进行更新,规则自定义,cc=values(bb)+values(cc)

 

        b、只更新最后添加的字段,bb=values(bb)

 

        c、更新时,如果有类似create_date 不为空而且没有默认值的列,需要在key和value中添加,但最后更新的列中不一定包含此列。 ex: insert into table (aa,bb,create_date) values (xx,xx,now()) on duplicate key update aa = values(aa),bb=value(bb)

 

 

    B、replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)

 

        该方式表是要有唯一主键的。原理跟A差不多。判断主键,存在即更新,不存在则插入。 如果只更新其中1、2个字段的时候,不要用这个方法,否则会将其他的字段置空,或者执行前将values值填写完整。

 

    不过该方法有个坑,对于配置有主从服务器的时候,会导致从库的自增主键与主库的自增主键无法保持一致。

        详细链接: http://blog.xupeng.me/2013/10/11/mysql-replace-into-trap/

 

 

   replace into 和insert into on duplicate key update的不同

 

         a、replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值。

 

        b、insert into 则是只update重复记录,不会改变其它字段。

 

分享到:
评论
2 楼 yuelangyc 2015-07-06  
beming 写道
时间过去有点长,想请教一个问题,如果我只想批量更新,不插入有没有好的办法呢??

只更新的话, 用update语句就可以 需要之前每条记录的ID值,或者要更新数据的条件范围。
1 楼 beming 2015-07-02  
时间过去有点长,想请教一个问题,如果我只想批量更新,不插入有没有好的办法呢??

相关推荐

    Mysql Update批量更新的几种方式

    刚开始你可能会想到使用循环执行多条UPDATE语句的方式,就像以下的python程序示例: for x in xrange(10): sql = ''' UPDATE mytable SET myfield='value' WHERE other_field='other_value'; ''' 这种方法并没有...

    java 下执行mysql 批量插入的几种方法及用时

    java 下执行mysql 批量插入的几种方法及用时,1000次插入方法的比较。

    c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    在之前只知道SqlServer支持数据批量插入,殊不知道Oracle、SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法。 首先说一下,IProvider里有一个用于实现...

    mybatis中批量插入的两种方式(高效插入)

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。这篇文章主要介绍了mybatis中批量插入的两种方式(高效插入)的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧

    批量下载MySQL面试题 40道.pdf等

    MySQL 中有哪几种锁? 1 、 表级锁: 开销小, 加锁快; 不会出现死锁; 锁定粒度大, 发生锁冲突的概率最高, 并发度最低。 2 、 行级锁: 开销大, 加锁慢; 会出现死锁; 锁定粒度最小, 发生锁冲突的概率最低, ...

    Mysql全局ID生成方法

    既然要sharding,那么不可避免的要讨论到sharding key问题,在有些业务系统中,必须保证sharding key全局唯一,比如存放商品的数据库等,那么如何生成全局唯一的ID呢,下文将从DBA的角度介绍几种常见的方案。...

    c#实现几种数据库的大数据批量插入

    主要介绍了c#实现几种数据库的大数据批量插入,主要包括SqlServer、Oracle、SQLite和MySQL,有兴趣的可以了解一下。

    MySQL 快速删除大量数据(千万级别)的几种实践方案详解

    笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而...

    Shell脚本中执行sql语句操作mysql的5种方法

    本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考。对于脚本输出的结果美化,需要进一步完善和调整。以下为具体的示例及其方法。 1、将SQL语句直接嵌入到shell脚本文件中 代码...

    Mysql中几种插入效率的实例对比

    通过实例跟大家介绍了Mysql中几种插入方法的效率对比,这其中包括逐条插入、基于事务的批量插入、单条语句一次插入多组数据以及导入数据文件等四种方法的对比,文中通过实例代码介绍很详细,需要的朋友们下来来一起...

    mysql数据库my.cnf配置文件

    在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。 # 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置...

    PHP执行批量mysql语句的解决方法

    当有多条mysql语句连起来需要执行,比如 $sqls= “insert table a values(1,2); insert table a values(2,3);” 需要执行的话php中可以使用的方法有三个: mysql_query pdo mysqli 三种方法当sqls语句没有问题的时候...

    MYSQL开发性能研究之批量插入数据的优化方法

    在网上也看到过另外的几种方法,比如说预处理SQL,比如说批量提交。那么这些方法的性能到底如何?本文就会对这些方法做一个比较

    mysql 循环批量插入的实例代码详解

    前几天在MySql上做分页时,看到有博文说使用 limit 0,10 方式分页会有丢数据问题,有人又说不会,于是想自己测试一下。测试时没有数据,便安装了一个MySql,建了张表,在建了个while循环批量插入10W条测试数据的时候...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    EntityFramework.BulkInsert:EntityFramework6的快速批量插入

    NuGet 有几种可用的NuGet软件包: EntityFramework6.BulkInsert EntityFramework6.BulkInsert.SqlServerCe EntityFramework6.BulkInsert.MySql目的该库的目的是使用EntityFramework 6和您现有的DbContext实例执行...

Global site tag (gtag.js) - Google Analytics