我有一个需要向数据库插入大量数据的脚本(270k行),我正在使用预处理语句(带有for循环)。
当我执行(res, err := stmt.Exec
)时,我可以检索插入数据库的最后一个ID(id, err = res.LastInsertId()
)。
但是由于我向数据库发出了很多请求,在16k行之后我得到max_prepared_statements(16,382) error
(然后我尝试将最大值设置为100万而不是16,382,但问题仍然存在)。
我的问题是,是否有另一种方法可以插入数据库并在不使用预准备语句的情况下检索最后插入的ID?
我现在的插入代码是:
stmt, err := db.Prepare(`INSERT info SET title=?,minimage=?,downloadfile=?,rating=?,peoplewatched=?,likes=?`)
checkErr(err)
res, err := stmt.Exec(title,minimage,downloadfile,rating,peoplewatched,likes)
checkErr(err)
id, err = res.LastInsertId()
checkErr(err)
fmt.Println(id)
由于
答案 0 :(得分:2)
对于那些遇到同样问题的人,请确保只调用一次Prepare语句,并将其从任何循环中删除。我只是注意到它在我的'for'循环中,因此每次都会创建一个新的准备语句。
也感谢前面提到的Apin