在golang中的一个sql事务中的批量提升

前端之家收集整理的这篇文章主要介绍了在golang中的一个sql事务中的批量提升前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经用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()

理想情况下,我可以准备一个查询,并建立一个同时发送的提供的列表.但是在这里,每次执行后我们都会从数据库中获得一个结果.有什么建议如何去做这个?

编辑:
我的同事发现,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,err := stmt.Exec(67.89,err := stmt.Exec(10.23,3)
...
tx.Commit()

还要查看这个answer,这有关于交易的很多细节.

猜你在找的Go相关文章