鍍金池/ 問答/PHP  Linux  數(shù)據(jù)庫/ mysql怎樣高效批量更新數(shù)據(jù)?

mysql怎樣高效批量更新數(shù)據(jù)?

UPDATE kt_accbalance 
SET accbalance_ep = CASE user_id 
WHEN 10001 THEN
accbalance_ep + 8 
WHEN 10002 THEN
accbalance_ep + 5 
WHEN 10004 THEN
accbalance_ep + 3 
WHEN 10006 THEN
accbalance_ep + 10 
WHEN 10039 THEN
accbalance_ep + 100 
END 
WHERE
user_id IN ( 10001, 10002, 10004, 10006, 10039 )

這是批量更新5條。如果批量更新2000條,意思就是有2000個(gè)user_id要更新。2000個(gè)這種長度恐怖啊。mysql能處理這么長的嗎?2000條,sql語句是現(xiàn)在長度的400倍。mysql行嗎,允許sql能整這么長嗎?如果不可以,有沒有其他替代的高性能方案呢。

參考了這個(gè)文章:參考

回答
編輯回答
嘟尛嘴

mysql默認(rèn)語句最大長度是1m,2000條問題不大。但是你可以選擇用熟悉的語言來拼sql語句,從文件讀userid,這樣支持更多的userid,效率更高

2018年8月15日 10:34
編輯回答
誮惜顏

用Medoo 批量更新2W條問題不大.

2017年3月26日 01:04
編輯回答
墨小羽

問題分析:在mysql語句里面,存在一個(gè)case when的條件處理,這個(gè)條件處理直接導(dǎo)致整條sql語句可能因?yàn)殚L度過長而無法正常運(yùn)行。
解決思路:將case when的條件處理從mysql里面剝離出來,交給php來處理,比如在一個(gè)循環(huán)里面遍歷所有user_id,每次遍歷都拼接一個(gè)update語句(只針對單個(gè)用戶),然后在循環(huán)體里面完成mysql_query就行了。

2018年2月3日 16:17