【问题标题】:Go Language - Insert data to Mysql database without prepared statementsGo 语言 - 在没有准备好的语句的情况下将数据插入 Mysql 数据库
【发布时间】: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 线程。

标签: mysql go


【解决方案1】:

对于遇到相同问题的人,请确保只调用一次 Prepare 语句,并将其排除在任何循环之外。我只是注意到它在我的“for”循环中,因此它每次都创建一个新的准备语句。

也感谢之前提到的Apin

【讨论】:

  • 这就是为什么您需要在此处附加更多代码以便其他人更好地理解的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多