美文网首页
limit遍历数据带来的容易忽视的问题

limit遍历数据带来的容易忽视的问题

作者: 等哈哈咯 | 来源:发表于2018-01-17 14:31 被阅读0次

    场景是:
    执行一个脚本文件,将符合条件(包含status=0)的记录的status字段改成1。几百万的记录的表。

    很显然,不能一次get出数据,而是使用循环的方式,每次获取小量数据,修改状态。逐步的遍历整个表

    offset = 0,num = 5000;
    for{
    list = select * from 表 where condition limit offset num;

    逻辑处理{ list内符合条件的数据,status = 1}
    offset += count(list)

    }
    这种方式存在bug。
    list内的数据每次修改n个数据时,下一次的limit会遗漏掉n个数据。
    例如: 第一次获取 limit[0,5000),将其中的10条数据status = 1。则下一次,limit[5000,10000)时候,此时会遗漏掉10条数据,因此前5000个符合条件的记录以及被
    更新过了。

    因此,如果存在数据修改的遍历,offset+=( count(list) - count(修改的量) )

    相关文章

      网友评论

          本文标题:limit遍历数据带来的容易忽视的问题

          本文链接:https://www.haomeiwen.com/subject/wigyoxtx.html