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/
      
     
  • 相关阅读:
    pip 使用代理
    npm i -S -D -g 区别
    javascript JSON. 转换 注意事项
    hexo 博客
    kotlin 注意的地方
    VMware-workstation-full-10.0.1-1379776 CN
    分析公司shareaholic报告:Chrome浏览器使用量居首
    搜狗高速浏览器4.2正式版发布
    中行用户购买KIS2014 68元/3年,时间:2013.10.18-2013.11.18
    1元抢卡巴KAV_不限量疯抢即日起至2013.10.31截止
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5466051.html
Copyright © 2011-2022 走看看