(优化前)一般使用的批量更新的方法:

foreach ($display_order as $id => $ordinal) {

    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
    mysql_query($sql);
}
更新一条数据一个update语句,更新100条就100个update语句,就要commit100次;
 

(优化后)批量更新优化小技巧:使用的是case when的小技巧来实现批量更新的

1>.下面是批量更新多条数据,单个字段的语句

  UPDATE mytable

    SET myfield = CASE id

        WHEN 1 THEN 'value1'
        WHEN 2 THEN 'value2'
        WHEN 3 THEN 'value3'
      END
  WHERE id IN (1,2,3)
语句的意思:更新myfield 字段的值,若id为1,则myfield的值为value1;若id为2,则myfield的值为value2;若id为3,则myfield的值为value3,依次通过case when判断比较更新对应的值
 
2>.下面是批量更新多条数据,多个字段的语句
  UPDATE categories

      SET display_order = CASE id
          WHEN 1 THEN 3
          WHEN 2 THEN 4
          WHEN 3 THEN 5
      END,
      title = CASE id
          WHEN 1 THEN 'New Title 1'
          WHEN 2 THEN 'New Title 2'
          WHEN 3 THEN 'New Title 3'
      END
  WHERE id IN (1,2,3)
 
使用case when这种小技巧来实现批量更新数据效率很高,相比使用foreach、for、while等等一些循环来实现批量更新,它一条update更新多条数据,只需要commit一次,而使用循环来批量更新的话就需要commit多次(取决于循环的次数)
 
注意:执行的sql语句长度受到my.ini配置文件中max_allowed_packet参数的限制,所以当您使用本文的方法批量更新多条数据,超出sql语句长度限制时,请适当的修改该参数
 
本文参考自:http://www.ghugo.com/update-multiple-rows-with-different-values-and-a-single-sql-query/
  
 

mysql:批量更新的更多相关文章

  1. mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ...

  2. mysql 批量更新

    bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表 ...

  3. mysql 批量更新与批量更新多条记录的不同值实现方法

    作者: 字体:[增加 减小] 类型:转载 时间:2013-10-02 我要评论 在mysql中批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql ...

  4. Mysql 批量更新update的表与表之间操作

    Mysql 批量更新update的表与表之间操作 一.方法一 使用User2表数据更新User表: update User as a ,User2 as b set a.role_id=b.set_v ...

  5. mysql 批量更新常用操作

    mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ' ...

  6. mysql批量更新写法

    mysql批量更新写法<pre> $namedmp=filter($_POST['namedmp']); $namedsp=filter($_POST['namedsp']); $name ...

  7. [转]MySQL批量更新死锁案例分析

    文章出处:http://blog.csdn.net/aesop_wubo/article/details/8286215 问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常, ...

  8. mysql批量更新

    UPDATE ta INNER JOIN tb ON ta.id=tb.id SET ta.col1=tb.col1, ta.col2=tb.col2 以上代码用来批量更新mysql中的记录

  9. mysql批量更新、多表更新、多表删除

    本文介绍下,mysql中进行批量更新.多表更新.多表删除的一些实例,有需要的朋友可以参考下. 本节主要内容: mysql的批量更新.多表更新.多表删除 一,批量更新: 复制代码代码示例: update ...

  10. MySQL批量更新死锁案例分析--转载

    问题描述 在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackE ...

随机推荐

  1. PHP-FPM + Nginx: 502错误

    /etc/php5/fpm/pool.d/www.conf 里面找到这样一段代码: listen = 127.0.0.1:9000 在这上面代码的下面添加一行: listen = /var/run/p ...

  2. NERDTree 快捷键辑录

    参看连接:http://www.cnblogs.com/lexus/archive/2012/11/04/2753187.html http://yang3wei.github.io/blog/201 ...

  3. SET ? DECLARE

    http://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html http://dev.mysql.com/doc/refman/5 ...

  4. Java中只有按值传递,没有按引用传递!

      今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java ...

  5. nginx 反向代理 取得真实IP和域名

    nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...

  6. Iphone H5上传照片被旋转

    最近做项目发现在Iphone下,我们上传图片都会被翻转,最后查阅资料发现,的确是IOS的问题 不说过程,直接解决方法 iOS下,html方式使用<input type="file&qu ...

  7. C# 操作Cookie类

    1.Cookie操作类 using System; using System.Data; using System.Configuration;using System.Web;using Syste ...

  8. (转)freemakeer初入门

    在web开发过程中,尤其是后台管理系统的开发中,少不了增删改成的基础操作,原来我自己的做法是一份一份的拷贝粘贴,然后修改其中的不同,然而这样既枯燥无味又浪费了大量的时间,所以根据自己项目结构的特点写了 ...

  9. NSURL基本操作示例说明

    http://blog.csdn.net/zhibudefeng/article/details/7920686

  10. Spark Programming--Transformations

    map 将RDD中的每个数据项,一对一的映射关系,RDD数目不变,分区数也不变 例子: 数据集: map操作: flatMap 和map一样,但是会拆分每一个map之后的list,可以理解为一对多(注 ...