weixin_40187983
2018-06-20 09:36
采纳率: 73.6%
浏览 11.4k

MySQL IN(............) 里面有大量数据

我要更新一表格,其被Update的数量非常非常的多

update ybtbo set TBNewFlag=1 where AtTBOID IN (698,699.............)

我这(689,699,700.............. ) 约有4000到5000个
我少数用100多个是没问题的

我有想到的是,将这些数组切500个update一次,但我不知道怎么切

目前将这些数组传到了temstr=(689,699,700...............)

希望能提供较好的方式来update这个大表格

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • oyljerry 2018-06-20 10:25
    已采纳

    这么多In的数据,最好还是用其他条件来取代In

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • yyl0503 2018-06-20 09:42

    可以试一下用存储过程批量更新

    评论
    解决 无用
    打赏 举报
  • 沙坪坝、黄师傅 2018-06-20 09:46

    in里面的id如果是连续的就直接id>xxx。如果是不连续的id的话,分多条sql去更新,我觉得快速的办法就是在excel中去组装多条sql,把id拷贝到excel的一列里面去后面不说你也知道怎么做了。

    评论
    解决 无用
    打赏 举报
  • yyl0503 2018-06-20 10:46

    drop procedure if exists procUpdate;
    CREATE PROCEDURE procUpdate()
    begin
    DECLARE minid INT;
    DECLARE maxid INT;
    DECLARE currentid INT;
    DECLARE endid INT;
    DECLARE seed INT;
    set seed=500;
    set minid = 698;
    set maxid = 你的最大值;
    select minid,maxid;
    set currentid=minid;
    while currentid<=maxid
    do
    if currentid+seed>maxid then
    set endid=maxid;
    else
    set endid=currentid+seed;
    end if;
    update ybtbo set TBNewFlag=1 where AtTBOID = minid
    between currentid and endid;
    set currentid=endid+1;
    end while;
    end;
    CALL procUpdate;
    drop procedure procUpdate;

    评论有字数限制。所以再次回答一次,上面是存储过程,没有你的数据库,不知道能不能行;如果不能执行,你再百度一下,改一下

    评论
    解决 无用
    打赏 举报
  • lihongbiao0610 2018-06-20 12:20

    where AtTBOID IN (498,499.............) or AtTBOID IN (598,599.............) or AtTBOID IN (698,699.............)

    评论
    解决 无用
    打赏 举报
  • 诗歌电台 2018-06-20 13:11

    传递参数用list,sql语句里foreach循环list,也不用分割啊

    评论
    解决 无用
    打赏 举报
  • 六月的星星 2018-06-20 14:05

    最好用sql查询出需要更新的主键update table set a=** where pkvalue in(select pkvalue from table )

    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-06-20 14:19

    给你一个思路,AtTBOID 建立索引,in里面的放入临时表,两个表做inner join,结果就是你要的。

    评论
    解决 无用
    打赏 举报
  • 牵动你我 2018-06-23 05:08

    首先创建一张临时表AtTBOID_Tmp,用来存储in 里面的id,字段名也叫做AtTBOID吧
    然后执行下面的语句就可以了
    update ybtbo t1,AtTBOID_Tmp t2 set t1.TBNewFlag=1 where t1.AtTBOID = t2.AtTBOID;

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题