我有一个很大的记录列表(~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)?