Skip to main content

事务

自动事务

默认情况下,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 的创建