Golang Go语言中请问 gorm 如何获取到更新后的值
Golang Go语言中请问 gorm 如何获取到更新后的值
type Counter struct {
BizName string gorm:"primary_key"
NextId string
CreatedAt time.Time
}
counter := model.Counter{BizName: “class”}
err = d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Error
想实现一个简易的发号器,想利用 mysql update 的原子性,更新 NextId 并获取到更新后的值,请问如何搞定
更多关于Golang Go语言中请问 gorm 如何获取到更新后的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Find(&counter).Error
更多关于Golang Go语言中请问 gorm 如何获取到更新后的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
利用 postgresql 的 Returning 关键字。mysql 或者其他估计也有对应的解决方案。
d.Model(&counter).Debug().Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1))
d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Find(&counter).Scan(&counter).Error
在Go语言中,使用GORM(Go Object-Relational Mapping)库时,如果你需要在执行更新操作后获取到更新后的值,有几种常见的方法可以实现这一点。
-
使用
Find
方法重新查询: 在执行Save
或Update
方法后,你可以使用Find
方法重新查询数据库,以获取更新后的完整记录。这是最直接的方法,但可能会增加一次额外的数据库查询。 -
使用
RowsAffected
和Returning
: GORM支持在更新时通过Returning
子句返回被更新的列。这通常用于PostgreSQL数据库。例如:var updatedModel YourModel db.Model(&yourInstance).Update("column", value).Returning("*").First(&updatedModel)
这里
Returning("*")
会返回更新后的所有列。注意,Returning
的具体用法可能因数据库类型而异。 -
使用事务和临时变量: 在事务中,你可以先查询当前记录,然后执行更新操作,并在事务提交后使用查询到的临时变量。这种方法适用于需要确保数据一致性的场景。
-
检查数据库驱动和GORM版本: 确保你使用的数据库驱动和GORM版本支持你想要使用的特性。不同版本的GORM在API和功能上可能有所不同。
选择哪种方法取决于你的具体需求,比如性能考虑、数据库类型以及代码的可读性和维护性。