mysql 中實現多條數據同時更新


   有時間我們需要對一張表進行批量數據的更新。首先我們想的是update 語句。

   比如對一張訂單表order_info 多條數據更新,

    update order_inifo

    set   order_code =case order_id

           when    1 then 'abc'

           when    2 then 'bcd'

          when    3 then 'cde'

            ........

           end,

           order_title=case order_id

        

          when    1 then '標題1'

          when    2 then '標題2'

          when    3 then  '標題3'

         ..........

         end

 when id in(1,2,3,..)

 這樣實現多條數據 多個字段的更新,這樣更新方式的條件是:

根據表中的字段id在等於不同值時,更新字段 order_code,order_title. 

更新成相應的數據,這些數據都是可以明確的。但有時間這些數據是存放在一個集合里面,‘abc’,'bcd','cde','標題1','標題2','標題3',就沒法寫在上面了。這需要

遍歷集合拿到相應的值,才能賦予對應的字段。由於 需要更新的字段 內容和id儲藏在集合中,就沒辦法使用這樣的sql語句了。有沒有別的辦法呢?

  我們可以使用replace into方法來實現更新,replace into類似於insert,insert是比較熟悉的,經常使用,就是向數據庫中插入數據。replace into 也是向數據庫中

插入數據,不同的時,在插入數據時,數據庫會根據主鍵或者唯一建(必須保證操作表中含有主鍵或者唯一建)判斷表中是否已經含有對應的數據,如果沒有直接插入,等同於insert,如有表中已經有對應的數據,那replace into就會根據主鍵或唯一建將該條數據delete掉,再做insert處理。

這樣的話,我們完全可以使用replace into批量更新表中的數據。

<update id="upDateOrderInfo" parameterType="String" >
REPLACE INTO order_info (
 order_code,
 order_company,
 order_statu,
 order_id,
order_title 
 

SELECT 
 a.order_code,
 a.order_company,
 a.order_statu,
 b.order_id ,

 b.order_title
 
FROM
 (
   <foreach collection="datas" item="data" separator="union">
 SELECT 
    2 order_statu,
   '${data.order_id}' order_id,
   '${data.order_code}' order_log,
   '${data.order_company}' order_company
  </foreach>
   ) a,
 order_info b 
WHERE a.order_id = b.order_id 
</update>

主鍵order_id和需要更新的字段order_code,order_company。都在集合中。通過replace into可以實現表的批量更新。值得注意的是:

replace into在做update操作時,將原來的數據delete掉了,所有除了更新的字段,其他字段(order_title)需要從原表中查詢出來,一塊更新。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM