gpt4 book ai didi

sql - golang中的sql事务中的批量更新

转载 作者:IT老高 更新时间:2023-10-28 13:03:57 25 4
gpt4 key购买 nike

我一直在搞乱 golang 的带有事务的 sql 包,我试图了解如何在没有“每插入”往返通信的情况下进行批量更新插入。 examples here并没有真正展示如何完成任何批量查询。

updateMoney, err := db.Prepare("INSERT INTO balance set money=?, id=? ON DUPLICATE UPDATE balance SET money=money+? WHERE id=?")
...
tx, err := db.Begin()
...
res, err := tx.Stmt(updateMoney).Exec(123.45, 1, 123.45, 1)
res, err := tx.Stmt(updateMoney).Exec(67.89, 2, 67.89, 2)
res, err := tx.Stmt(updateMoney).Exec(10.23, 3, 10.23, 3)
...
tx.Commit()

理想情况下,我可以获取一个准备好的查询,并建立一个要同时发送的 upsert 列表......但是在这里,我们在每次执行后从数据库中返回一个结果。有什么建议可以解决这个问题吗?

编辑:我的同事找到了 this open ticket这描述了问题......它看起来比严格在事务的上下文中更令人担忧。

最佳答案

这取决于您使用的驱动程序,某些驱动程序/数据库根本不支持事务。

例如 go-sql-driver/mysql支持交易就好了。

您的代码应该可以工作,或者您可以稍微修改一下:

tx, err := db.Begin()
...
stmt, err := tx.Prepare(`INSERT INTO balance set money=?, id=? ON DUPLICATE UPDATE balance SET money=money+? WHERE id=?`)
res, err := stmt.Exec(123.45, 1, 123.45, 1)
res, err := stmt.Exec(67.89, 2, 67.89, 2)
res, err := stmt.Exec(10.23, 3, 10.23, 3)
...
tx.Commit()

也可以查看 answer其中涉及到很多关于交易的细节。

关于sql - golang中的sql事务中的批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25289593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com