为了确保数据一致性,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(...).Error
if err != nil { // 遇到错误时回滚事务
tx.Rollback()
}
// ...
// 提交事务
err = tx.Commit().Error
if err != nil { // 提交时出错, 也要回滚
tx.Rollback()
}