事务

未匹配的标注
本文档最新版为 v2,旧版本可能放弃维护,推荐阅读最新版!

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
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/gorm/v1/transac...

译文地址:https://learnku.com/docs/gorm/v1/transac...

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~