go database / sql lastinsertid返回奇怪的值

时间:2017-12-21 15:53:42

标签: mysql go

我有一个很大的记录列表(~21k),我正在发送到mysql数据库。

现在为了优化流程,我正在请求的每500份文件:

for k, record := range records {
    ...
    sqlStatement = "INSERT INTO ..."
    if k%500 == 0 {
        stmt, err := db.Prepare(sqlStatement)
        if err != nil {
            log.Println(err)
        }
        res, err := stmt.Exec(valuesArgs...)
        if err != nil {
            log.Println(err)
        }
        fmt.Println(res.LastInsertId()) //Print 19895
    }
}

一旦我完成了我的记录循环,我仍然会再做一次插入,以防我们在循环结束时没有500的倍数:

...
stmt, err := db.Prepare(sqlStatement)
if err != nil {
    log.Println(err)
}
res, err := stmt.Exec(valuesArgs...)
if err != nil {
    log.Println(err)
}
fmt.Println(res.LastInsertId()) // print 20394

我很惊讶地看到它显示的是20394的id,但在数据库中,最大ID为20741。

在for last循环中的id和之后的id之间,存在499的差异。

我尝试将smtc放在一个结构中并在循环之后/最后一次调用之前关闭它,但是没有,它什么都没改变!

知道为什么最后一个id不是插入的最后一个(20741)?

0 个答案:

没有答案