前言
为了确保数据一致性,在项目中会经常用到事务处理,回滚操作还是比较常见的需求;事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部都执行,要么全不执行,对于MySQL事务相信大家应该都不陌生,这篇文章主要总结一下在Go语言中Gorm是如何实现事务的;感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
禁用默认事务
gorm事务默认是开启的。为了确保数据一致性,Gorm会在事务里执行写入操作(增删改)。
如果对数据一致性要求不高的话,可以在初始化时禁用它,性能将提升大约30%。
一般不推荐禁用。
// 全局禁用
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
SkipDefaultTransaction: true,
})
复制代码
自动事务
通过db.Transaction函数实现事务,如果闭包函数返回错误,则回滚事务。
db.Transaction(func(tx *gorm.DB) error {
// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
if err := tx.Create(&User{Name: "Lili"}).Error; err != nil {
// 返回任何错误都会回滚事务
return err
}
if err := tx.Create(&User{Name: "xiaoming"}).Error; err != nil {
return err
}