于数据库执行多个更新操作时,事务会将多个操作当成单个单元处理,要成功都成功,否则都失败。本文通过实例说明Go Sql事务处理。
1. 环境准备
搭建PostgreSql数据库环境,我们打算在postgre数据库中新建表meta_data(id, source),然后插入记录测试事务。
go操作数据库的包为"database/sql",这里数据库使用postgreSql,需要导入github.com/lib/pq;下面是准备数据库连接代码。
go默认实现了数据库连接池,无需引入第三方连接池实现。
2. 事务实现
下面是事务示例实现,我们使用postgreSql,因此变量占位符使用 $ , MySql使用 ?。
函数开始之前首先启动事务,使用defer语句确保最后提交事务。接着执行多个插入语句,如果有错误回滚事务。
这个实现没有问题,只是每次需要写和事务相关的代码,显得多余,最好能封装事务相关代码,用户只关心业务。
3. 事务操作封装
上节手动实现了事务,本节对事务操作进行封装,让代码更有通用性。
这里定义UpdateWithTx()函数,其中封装了事务相关代码,具体执行和数据库相关操作通过其函数参数传入。
首先获得事务指针,接着写匿名函数,使用defer关键词确保函数执行完成之前自动管控事务。最后执行实际操作的函数并返回状态。下面我们测试该函数。
具体业务和上节代码一样,但我们不在关心事务相关代码,用户可测试有错误时是否回滚事务。
4. 总结
本文通过示例介绍了Go Sql事务实现,并对事务相关操作进行封装,使用户只需关心业务操作。
文章转载自DB之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
453次阅读
2025-04-21 16:58:09
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
356次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
332次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
305次阅读
2025-04-07 12:14:29
postgresql+patroni+etcd高可用安装
necessary
168次阅读
2025-03-28 10:11:23
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
149次阅读
2025-04-14 15:58:34
墨天轮PostgreSQL认证证书快递已发(2025年3月批)
墨天轮小教习
129次阅读
2025-04-03 11:43:25
SQL 优化之 OR 子句改写
xiongcc
93次阅读
2025-04-21 00:08:06
融合Redis缓存的PostgreSQL高可用架构
梧桐
87次阅读
2025-04-08 06:35:40
PostgreSQL拓展PGQ实现解析
chirpyli
86次阅读
2025-04-07 11:23:17