🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 事务示例代码 ~~~ 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操作,不要造成锁表