事务
自动事务
默认情况下,GORM 在执行单条创建、更新、删除操作时,会将其包裹在事务中以保证数据一致性。
闭包事务
使用 Transaction 方法可以自动处理事务的提交和 回滚。
db.Transaction(func(tx *gorm.DB) error {
// 在事务中执行数据库操作(从这里开始,你应该使用 '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
})
手动事务
// 开始事务
tx := db.Begin()
// 在事务中执行数据库操作(使用 'tx' 而不是 'db')
tx.Create(...)
// 遇到错误时回滚事务
tx.Rollback()
// 否则,提交事务
tx.Commit()
保存点 (SavePoint)
tx := db.Begin()
tx.Create(&user1)
tx.SavePoint("sp1")
tx.Create(&user2)
tx.RollbackTo("sp1") // 回滚 user2 的创建
tx.Commit() // 提交 user1 的创建