beeg中orm的坑

beeg中orm的坑在使用 beego 的 orm 的过程中 基本是使用文档进行开发 但是有一处我没有细看文档 于是在开发的过程中 就产生了一些疑问 有这些疑问后 我就要清楚到底是怎么回事 疑问一 如果在 beego 框架中的 controller 中开启了事务 既不进行提交事务

大家好,我是讯享网,很高兴认识大家。

在使用beego的orm的过程中,基本是使用文档进行开发,但是有一处我没有细看文档,于是在开发的过程中,就产生了一些疑问,有这些疑问后,我就要清楚到底是怎么回事

疑问一

如果在beego框架中的controller中开启了事务,既不进行提交事务,也不进行回滚事务,会发生什么?

示例代码一

func (controller *CalendarController) Test() { 
    //此处开启事务 tx, err := global.ORM.Begin() logs.Info(err) //此处更新一条数据 exec, err := tx.Raw("update event_batch set next_time=10 where id=1").Exec() logs.Info(exec,err) if err != nil { 
    return } if true { 
    //err := tx.Rollback() logs.Info(err) goto ERR } //tx.Commit() //成功返回 controller.Data["json"] = global.OutMsgFormat(0, "success", nil, nil) _ = controller.ServeJSON() return ERR: //返回错误提示 controller.Data["json"] = global.OutMsgFormat(1002, " 出错了", nil, nil) _ = controller.ServeJSON() } 
讯享网

此时访问这个接口,则会直接返回

讯享网{ 
    "code": 1002, "params": null, "reason": " 出错了", "result": null } 

此时我们通过mysql客户端进行更新这条数据,则会发现这条语句会一直卡住,最后得到错误Lock wait timeout exceeded; try restarting transaction,很明显,这条数据被之前的事务锁住了,还会带来的一个影响就是我们重新请求这个接口,也会被卡住,直到超时。
以下是发生的错误的截图

  • 运行sql卡住
    在这里插入图片描述
  • 运行sql报错

  • 访问接口卡住

在这里插入图片描述

结论一

之前想当然的认为,发生错误后直接goto ERR,返回,则此进程结束,事务不显示的回滚,那么也没有进行提交,则不会有问题,这在php的开发过程中都是如此写的,但是经过实验发现,必须显示的进行事务回滚,否则这个事务则会一直存在,直到把这个go项目进行重启。

踩坑二

func (controller *CalendarController) Test() { 
    //此处开启事务 tx, err := global.ORM.Begin() logs.Info(err) //此处更新一条数据 //注意⚠️⚠️⚠️,此处使用的是global.ORM进行更新操作,那么此时事务是没有任何作用的 exec, err := global.ORM.Raw("update event_batch set next_time=10 where id=1").Exec() logs.Info(exec,err) if err != nil { 
    return } if true { 
    //err := tx.Rollback() logs.Info(err) goto ERR } //tx.Commit() //成功返回 controller.Data["json"] = global.OutMsgFormat(0, "success", nil, nil) _ = controller.ServeJSON() return ERR: //返回错误提示 controller.Data["json"] = global.OutMsgFormat(1002, " 出错了", nil, nil) _ = controller.ServeJSON() } 
小讯
上一篇 2025-03-30 21:29
下一篇 2025-02-21 13:32

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/125870.html