iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go GORM 事务详细介绍
  • 238
分享到

Go GORM 事务详细介绍

2024-04-02 19:04:59 238人浏览 八月长安
摘要

目录禁用默认事务事务嵌套事务手动事务一个特殊的示例SavePoint、RollbackTo禁用默认事务 为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果

禁用默认事务

为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。

// 全局禁用
db, err := Gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: true,
})

// 持续会话模式
tx := db.Session(&Session{SkipDefaultTransaction: true})
tx.First(&user, 1)
tx.Find(&users)
tx.Model(&user).Update("Age", 18)

事务

要在事务中执行一系列操作,一般流程如下:

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
})

嵌套事务

GORM 支持嵌套事务,您可以回滚较大事务内执行的一部分操作,例如:

db.Transaction(func(tx *gorm.DB) error {
  tx.Create(&user1)

  tx.Transaction(func(tx2 *gorm.DB) error {
    tx2.Create(&user2)
    return errors.New("rollback user2") // Rollback user2
  })

  tx.Transaction(func(tx2 *gorm.DB) error {
    tx2.Create(&user3)
    return nil
  })

  return nil
})
// Commit user1, user3

手动事务

// 开始事务
tx := db.Begin()

// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
tx.Create(...)

// ...

// 遇到错误时回滚事务
tx.Rollback()

// 否则,提交事务
tx.Commit()

一个特殊的示例

func CreateAnimals(db *gorm.DB) error {
  // 再唠叨一下,事务一旦开始,你就应该使用 tx 处理数据
  tx := db.Begin()
  defer func() {
    if r := recover(); r != nil {
      tx.Rollback()
    }
  }()

  if err := tx.Error; err != nil {
    return err
  }

  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
     tx.Rollback()
     return err
  }

  return tx.Commit().Error
}

SavePoint、RollbackTo

GORM 提供了 SavePointRollbackto 来提供保存点以及回滚至保存点,例如:

tx := db.Begin()
tx.Create(&user1)

tx.SavePoint("sp1")
tx.Create(&user2)
tx.RollbackTo("sp1") // Rollback user2

tx.Commit() // Commit user1

到此这篇关于Go GORM 事务详细介绍的文章就介绍到这了,更多相关Go GORM 事务 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go GORM 事务详细介绍

本文链接: https://www.lsjlt.com/news/120937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go GORM 事务详细介绍
    目录禁用默认事务事务嵌套事务手动事务一个特殊的示例SavePoint、RollbackTo禁用默认事务 为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果...
    99+
    2024-04-02
  • mysql事务详细介绍
    目录简介事务四个特性事务隔离级别验证MVCC当前读快照读当前读、快照读、MVCC关系mvcc 解决的问题MVCC实现原理可见性规则简介 事务是由一组sql语句组成的逻辑处理单元 事务...
    99+
    2024-04-02
  • Spring事务的详细介绍
    本篇内容介绍了“Spring事务的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Spring事务管理我相信大家都用得很多,但可能...
    99+
    2023-06-04
  • 【MySQL基础教程】事务详细介绍
    前言 本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~ 📌博主主页:小...
    99+
    2023-09-04
    mysql java 数据库
  • sqlserver中的事务和锁的详细介绍
    本篇内容主要讲解“sqlserver中的事务和锁的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlserver中的事务和锁的详细介绍”吧!一、脏读、...
    99+
    2024-04-02
  • H5的事件属性详细介绍
    这篇文章主要介绍“H5的事件属性详细介绍”,在日常操作中,相信很多人在H5的事件属性详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”H5的事件属性详细介绍”的疑惑有所帮...
    99+
    2024-04-02
  • JavaScript事件监听器详细介绍
    目录什么是事件1. 事件绑定2. 常见事件什么是事件 HTML 事件是发生在 HTML 元素上的“行为 ”。比如:页面上的 按钮被点击、鼠标移动到元素之上、按...
    99+
    2024-04-02
  • React事件处理超详细介绍
    目录1. 事件绑定1.1 函数组件1.2 类组件2. 合成事件3. 事件传参的3种不同写法4. this 指向问题1. 事件绑定 React 元素的事件处理和 DOM 元素的很相似,...
    99+
    2024-04-02
  • Go语言指针的详细介绍
    本篇内容介绍了“Go语言指针的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言为程序员提供了...
    99+
    2024-04-02
  • Nginx服务详细介绍
    Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastC...
    99+
    2023-06-05
  • springMVC详细介绍
    目录springMVC简介SpringMVC框架的优点第一个SpringMVC程序第一步:创建maven-web项目第二步:在pom.xml中添加依赖和插件第三步注册中央调度器第四步...
    99+
    2024-04-02
  • OAuth2 详细介绍!
    目录 一、文章介绍 二、OAth2 2.1 简介 2.2 OAuth2  授权总体流程 2.3 四种授权模式 1.授权码模式 2.简化模式 3.密码模式 4. 客户端模式 2.4 OAuth2 标准接口 2.5 GitHub 授权登录 1...
    99+
    2023-09-15
    github java
  • DockerCompose详细介绍
    目录一、Docker Compose的安装二、Docker Compose的基本使用三、Docker Compose的高级功能四、总结一、Docker Compose的安装 Dock...
    99+
    2023-05-16
    Docker Compose详解 Docker Compose
  • Go开发环境搭建详细介绍
    目录1、安装 Go常规安装2、使用 GoLand3、使用 VSCode1、安装 Go Go 语言支持多平台,因此需要根据你的平台来下载对应的 Go 安装包。本文以当前最新的版本(1....
    99+
    2023-05-15
    Go开发环境搭建 Go开发环境
  • Go语言数据类型详细介绍
    目录一、Go 语言两大数据类型二、基础类型三、复合类型指针四、数组(array)五、切片(slice)六、字典/映射(map)七、通道(channel)八、结构体(struct)九、...
    99+
    2024-04-02
  • Vue事件修饰符使用详细介绍
    目录1 .prevent阻止默认事件2 .stop阻止事件冒泡3 .once事件只触发一次4 .capture使用事件捕获模式5 .self当e.target是当前操作的元素才触发事...
    99+
    2022-11-13
    Vue事件修饰符 Vue事件修饰符的作用
  • javascript this详细介绍
    this的值是在运行时确定的  JS中的this究竟代表什么,这是在程序运行时根据上下文环境确定,可以分为以下几种情况。  1. 全局作用域中的this  在全局作用域中,this指向window对象。    1  2  3  4  5  ...
    99+
    2023-06-03
  • 【JAVA IO 详细介绍】
    JAVA IO 详细介绍 目录一、什么是IO?1.1 IO的介绍1.2 流的介绍1.2.1 流的特征1.2.2 数据流的特征1.2.3 输入流的特征1.2.4 输出流的特征 二、...
    99+
    2023-10-26
    java
  • Java maven详细介绍
    目录maven什么是maven仓库的种类仓库的配置本地仓库配置私服配置中央仓库配置maven标准目录结构常用命令maven项目的生命周期pom.xml依赖适用域总结maven 什么是...
    99+
    2024-04-02
  • Flink的详细介绍
    这篇文章主要介绍“Flink的详细介绍”,在日常操作中,相信很多人在Flink的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flink的详细介绍”的疑惑有所帮助!接...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作