【发布时间】:2016-05-11 11:02:34
【问题描述】:
我有一个脚本需要向数据库中插入大量数据(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)
谢谢
【问题讨论】:
-
你应该展示更多你的代码。您很可能从不关闭语句和/或行。
-
您是否在每次插入时创建新语句(调用 db.Prepare)?顺便说一句,你有另一个我认为相同问题的 stackoverflow 线程。