加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:22:49 所属栏目:大数据 来源:网络整理
导读:我已经用golang的sql包和事务搞乱了,而且我试图理解如何在每一行没有“每次插入”往返通信的情况下执行批量提升程序. examples here没有显示任何批量查询将如何进行. updateMoney,err := db.Prepare("INSERT INTO balance set money=?,id=? ON DUPLICATE UPD
我已经用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,这有关于交易的很多细节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读