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重复记录,不会改变其它字段。

猜你喜欢

转载自yuelangyc.iteye.com/blog/2005654