go gorm 事务的正确用法

2022年6月15日 462点热度 0人点赞 0条评论

重点

1.使用事务时必须通过 defer func() 匿名函数 recover 捕捉错误,panic错误和error ,如果错误不为nil,就会滚Rollback()

2.如何判断mysql出现事务表锁,可以通过navicat mysql 工具查看。

eg:从左上角工具栏,选择    工具->服务器监控->mysql(选择自己的数据库类型)->state字段

字段内容是:waiting for table metadatalock

证明有表锁,然后删除这些操作

3.也可以通过sql语句查看产生锁的sql:select * from information_schema.innodb_trx;


 

// 再唠叨一下,事务一旦开始,你就应该使用 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

  }

如果没有事务的需求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升

// 全局禁用

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{

  SkipDefaultTransaction: true,

})

14330go gorm 事务的正确用法

root

这个人很懒,什么都没留下

文章评论