全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-21 6 分钟 ✍️ juanwangdev

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

想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 GORM 原生 SQL 执行
下一篇 → GORM 嵌套事务实现
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码