常规的事务操作方法为Begin/Commit/Rollback
,每一个方法指定特定的事务操作。开启事务操作可以通过执行db.Begin
方法,该方法返回事务的操作接口,类型为gdb.Tx
,通过该对象执行后续的数据库操作,并可通过tx.Commit
提交修改,或者通过tx.Rollback
回滚修改。
常见问题注意:开启事务操作后,请务必在不需要使用该事务对象时,通过 |
db := g.DB() if tx, err := db.Begin(ctx); err == nil { fmt.Println("开启事务操作") } |
事务操作对象可以执行所有db
对象的方法,具体请参考 API文档。
if tx, err := db.Begin(ctx); err == nil { r, err := tx.Save("user", g.Map{ "id" : 1, "name" : "john", }) if err != nil { tx.Rollback() } fmt.Println(r) } |
if tx, err := db.Begin(ctx); err == nil { r, err := tx.Save("user", g.Map{ "id" : 1, "name" : "john", }) if err == nil { tx.Commit() } fmt.Println(r) } |
事务操作对象仍然可以通过tx.Model
方法返回一个链式操作的对象,该对象与db.Model
方法返回值相同,只不过数据库操作在事务上执行,可提交或回滚。
if tx, err := db.Begin(); err == nil { r, err := tx.Model("user").Data(g.Map{"id":1, "name": "john_1"}).Save() if err == nil { tx.Commit() } fmt.Println(r) } |
其他链式操作请参考 ORM链式操作(🔥重点🔥) 章节。