在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() 理想情况下,我可以准备一个查询,并建立一个同时发送的提供的列表.但是在这里,每次执行后我们都会从数据库中获得一个结果.有什么建议如何去做这个? 编辑:
这取决于您使用的驱动程序,一些驱动程序/数据库根本不支持事务.
例如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,这有关于交易的很多细节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |