为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。
1 法一
db.Transaction(func(tx *gorm.DB) error {// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {// 返回任何错误都会回滚事务return err}if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {return err}// 返回 nil 提交事务return nil})
2 法二
// 开始事务tx := db.Begin()// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')err := tx.Create(...).Errorif err != nil { // 遇到错误时回滚事务tx.Rollback()}// ...// 提交事务err = tx.Commit().Errorif err != nil { // 提交时出错, 也要回滚tx.Rollback()}
