GORM 事务基础与使用
GORM 事务机制保证多个数据库操作的原子性,本文介绍事务的核心用法。
什么是事务
事务是一组数据库操作的逻辑单元,具有 ACID 四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
事务中的操作要么全部成功提交,要么全部回滚,不存在中间状态。
事务语法
GORM 提供三种核心方法管理事务:
| 方法 | 作用 |
|---|---|
Begin() | 开启事务 |
Commit() | 提交事务 |
Rollback() | 回滚事务 |
基础用法
手动事务
Go
tx := db.Begin()
// 执行多个操作
if err := tx.Create(&user).Error; err != nil {
tx.Rollback()
return err
}
if err := tx.Create(&order).Error; err != nil {
tx.Rollback()
return err
}
// 全部成功则提交
tx.Commit()
使用 Transaction 方法(推荐)
Go
err := db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&user).Error; err != nil {
return err
}
if err := tx.Create(&order).Error; err != nil {
return err
}
return nil // 返回 nil 自动提交,返回 error 自动回滚
})
Transaction方法封装了 Begin/Commit/Rollback,自动处理异常,是推荐用法。
注意事项
- 事务内所有操作必须使用同一个
tx对象,不能使用原始db - 事务应及时提交或回滚,避免长事务占用连接资源
Transaction回调函数返回nil时自动 Commit,返回非nil时自动 Rollback- 嵌套调用
Transaction默认使用保存点(SavePoint)机制
要点总结
Begin()开启事务,Commit()提交,Rollback()回滚- 推荐使用
db.Transaction()方法,自动管理事务生命周期 - 事务内操作必须共用同一事务对象
- 回调函数返回值决定提交或回滚
文章存放路径:D:\git2\jwdev\articles\GORM\进阶\事务处理\事务基础与使用.md
📝 发现内容有误?点击此处直接编辑