为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。

1 法一

  1. db.Transaction(func(tx *gorm.DB) error {
  2. // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
  3. if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
  4. // 返回任何错误都会回滚事务
  5. return err
  6. }
  7. if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
  8. return err
  9. }
  10. // 返回 nil 提交事务
  11. return nil
  12. })

2 法二

  1. // 开始事务
  2. tx := db.Begin()
  3. // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
  4. err := tx.Create(...).Error
  5. if err != nil { // 遇到错误时回滚事务
  6. tx.Rollback()
  7. }
  8. // ...
  9. // 提交事务
  10. err = tx.Commit().Error
  11. if err != nil { // 提交时出错, 也要回滚
  12. tx.Rollback()
  13. }