(十二)Beego模型之事务处理
通常在一些订单交易业务都会涉及多个表的更新/插入操作,这个时候就需要数据库事务处理了,下面介绍beego orm如何处理mysql事务。
一、手动处理事务
// 创建orm对象
o := orm.NewOrm()
// 开始事务
tx, err := o.Begin()
// 开始执行各种sql语句,更新数据库,这里可以使用beego orm支持任何一种方式操作数据库
// 例如,更新订单状态
_, err1 := tx.QueryTable("orders").Filter("Id", 1001).Update(orm.Params{
"Status": "SUCCESS",
})
// 给用户加积分
_, err2 := tx.Raw("update users set points = points + ? where username=?", "tizi365", 100).Exec()
// 检测事务执行状态
if err1 != nil || err2 != nil {
// 如果执行失败,回滚事务
tx.Rollback()
} else {
// 任务执行成功,提交事务
tx.Commit()
}
二、自动处理事务
在一个闭包函数内执行事务处理,如果函数返回error则回滚事务。
// 创建orm对象
o := orm.NewOrm()
// 在闭包内执行事务处理
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
// 准备数据
user := new(User)
user.Name = "test_transaction"
// 插入数据
// 使用txOrm执行SQL
_, e := txOrm.Insert(user)
return e
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!