• 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/
      
     
  • 相关阅读:
    Kubernetes-Pod的扩、缩容以及滚动升级
    从一个例子开始认识Kubernetes
    Kubernetes的基本术语和概念
    一分钟看懂Docker的网络模式和跨主机通信
    监控神器:Premotheus+Grafana安装
    Linux不同服务器之间copy文件
    Oracle 存储情况查询
    Kubernetes v1.10 快速安装(只需三步)
    django 搭建一个投票类网站(二)
    django 搭建一个投票类网站(一)
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5466051.html
Copyright © 2020-2023  润新知