企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 事务示例代码 ~~~ func main(){ session := db.NewSession() defer session.Close() TX1(session) TX4(session) } func TX1(session *Session){ tx1, err := session.BeginTrans(xorm.PROPAGATION_REQUIRED) tx1.Session().Sql(sql).Execute() ..... TX2(session) TX3(session) tx1.CommitTrans() } func TX2(session *Session){ tx2, err := session.BeginTrans(xorm.PROPAGATION_NESTED) ..... tx2.CommitTrans() } func TX3(session *Session){ tx3, err := session.BeginTrans(xorm.PROPAGATION_MANDATORY) ..... TX4(session) tx3.CommitTrans() } func TX4(session *Session){ tx4, err := session.BeginTrans(xorm.PROPAGATION_REQUIRES_NEW) //注意这里事务所在的Session是一个全新Session,需要注意使用完毕后关闭该Session defer tx4.Session().Close() ..... tx4.CommitTrans() } ~~~ 注意: 1、嵌套事务相关API在使用过程中注意关闭使用完的Session,特别是事务类型为PROPAGATION_REQUIRES_NEW,会新建一个全新Session,此全新Session在使用完后请特别注意不要忘记关闭。 2、注意使用事务时对表的操作,请合理使用sql操作,不要造成锁表