GORM 默认在事务中执行单个 create, update, delete 操作,以确保数据库数据完整性。
如果你想将多个 create, update, delete 当成一个原子性操作,Transaction 就是为了这个而创造的。
事务
要在事务中执行一组操作,正常的流程如下所示。
// 开启事务 tx := db.Begin() // 在事务中执行一些数据库操作 (从这里开始使用 'tx',而不是 'db') tx.Create(...) // ... // 发生错误回滚事务 tx.Rollback() // 或者提交这个事务 tx.Commit()
具体例子
func CreateAnimals(db *gorm.DB) err { // 注意在事务中要使用 tx 作为数据库句柄 tx := db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() if tx.Error != nil { return err } if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil { tx.Rollback() return err } if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error }
© 著作权归作者所有
举报
发表评论
0/200