mysql怎样高效批量更新数据?

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个user_id要更新。2000个这种长度恐怖啊。mysql能处理这么长的吗?2000条,sql语句是现在长度的400倍。mysql行吗,允许sql能整这么长吗?如果不可以,有没有其他替代的高性能方案呢。

参考了这个文章:参考

阅读 8.9k
3 个回答

mysql默认语句最大长度是1m,2000条问题不大。但是你可以选择用熟悉的语言来拼sql语句,从文件读userid,这样支持更多的userid,效率更高

新手上路,请多包涵

问题分析:在mysql语句里面,存在一个case when的条件处理,这个条件处理直接导致整条sql语句可能因为长度过长而无法正常运行。
解决思路:将case when的条件处理从mysql里面剥离出来,交给php来处理,比如在一个循环里面遍历所有user_id,每次遍历都拼接一个update语句(只针对单个用户),然后在循环体里面完成mysql_query就行了。

用Medoo 批量更新2W条问题不大.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题