美文网首页
由于mysql使用不当引发的一个bug

由于mysql使用不当引发的一个bug

作者: loinliao | 来源:发表于2018-02-02 10:51 被阅读0次

需求

现有一个表A,A表中有一个字段metric_id,需要更新所有为nullmetric_id

操作

由于A表太大,故使用go语言写了一个程序分段更新。

程序大概逻辑如下

limit = 100000
for offset := 0; ; offset += limit {
    ids = `select id from A where metric_id is null limit ? offset ?`

    for _, id := range ids {
        Exec(`update A set metric=xxx where id=?`, id)
    }
    if ids < limit {
        break
    }
}

bug现象

执行完程序后A表中仍有很多metric_idnull的行

原因

select id from A where metric_id is null limit 100000 offset 0之后将0到100000的metric_idnull的行全都更新了

随后再执行select id from A where metric_id is null limit 100000 offset 100000相当于将现在表中0到100000的metric_idnull的数据略过了

相关文章

网友评论

      本文标题:由于mysql使用不当引发的一个bug

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