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

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. swfit-block反向传值

    // ViewController.swift // Block import UIKit class ViewController: UIViewController { var myLabel = ...

  2. wordpress页面前端添加编辑按钮

    <?php edit_post_link(__('Edit This')); ?> 在single.php或者page.php模板页面加入以上代码片段.当管理员登录后,可以直接点击编辑文章 ...

  3. Shared libraries

    Computer Systems A Programmer's Perspective Second Edition Shared libraries are modern innovations t ...

  4. android文字阴影效果(转)

    关于android文字阴影,共有四个属性可以设置: android:shadowColor :阴影颜色 android:shadowDx :阴影x方向位移 android:shadowDy :阴影y方 ...

  5. 哈哈,好像swift 以后有可能用来开发安卓喔

    好像swift  以后有可能用来开发安卓喔,哈哈

  6. docker rabbitmq

    docker run -d --hostname my1 --name dome-rabbit -p 15673:5672 -p 15674:15672 -e RABBITMQ_ERLANG_COOK ...

  7. 关于hive的存储格式

    1.存储格式 textfile rcfile orc parquet 2.存储方式 按行存储 ->textfile 按列存储 ->parquet 3.压缩比 4.存储textfile的原文 ...

  8. key_value 类型配置文件的解析

    #include <iostream> #include <string> #include <stdint.h> #include <map> #in ...

  9. ADO,OLEDB,ODBC,DAO的区别【转】

    转载:http://blog.csdn.net/sunboy_2050/article/details/6624684 ODBC(Open Database Connectivity,开放数据库互连) ...

  10. MongoDB聚合查询

    1.count:查询记录条数 db.user.count() 它也跟find一样可以有条件的 db.user.count({}) 2.distinct:用来找出给定键的所有不同的值 db.user.d ...