zoukankan      html  css  js  c++  java
  • mysql:批量更新

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

    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/
      
     
  • 相关阅读:
    SQLQuery实现动态表映射
    Hibernate Criteria查询
    关于短延迟 SLEEP USLEEP NANOSLEEP SELECT
    FFmpeg技术资料
    container_of()
    AES加解密算法的模式介绍
    无线AES与TKIP
    妻子1.0
    VLC简介及使用说明
    虚拟机中BusLogic与LSILogic的区别与分析
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5466051.html
Copyright © 2011-2022 走看看