Golang Go语言中gorm如何给某条数据的某字段值+1 或-1?

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中gorm如何给某条数据的某字段值+1 或-1?

gorm 如何给某条数据的某字段值+1 或-1,不要先读取后更新的操作,太 Low 了感觉

6 回复

更多关于Golang Go语言中gorm如何给某条数据的某字段值+1 或-1?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


昨晚刚刚遇到这个问题,官方文档案例有。
{“price”: gorm.Expr(“price * ? + ?”, 2, 100)}
(“quantity”, gorm.Expr(“quantity - ?”, 1)

看了,看到二楼的回答后,秒懂,哈哈,第一次看没看懂

db.DbEngin.Exec(“UPDATE xxxxx SET uv_count= uv_count + 1, update_time=? WHERE id = (?)”, update_time, sumTmp.Id)

晓得了。身为新手,使用 github.com/go-redis/redis 包时遇到一个新的问题,当在 set 一个 key 时,如何设置过期时间?

在Go语言的GORM库中,如果你想对某条数据的某个字段进行+1或-1的操作,可以使用GORM的Update函数结合原生SQL表达式来实现。这样可以避免先查询再更新的两步操作,提高性能并确保数据一致性。

假设你有一个结构体User,其中有一个字段Score,你想要给某条记录的Score字段加1或减1。

首先,确保你已经导入了GORM包并连接了数据库。然后,你可以使用以下代码来实现:

// 假设userID是你想要更新的用户ID
userID := 1

// 给Score字段加1
db.Model(&User{}).Where("id = ?", userID).Update("score", gorm.Expr("score + 1"))

// 给Score字段减1
db.Model(&User{}).Where("id = ?", userID).Update("score", gorm.Expr("score - 1"))

这里的gorm.Expr用于构建原生SQL表达式,使得GORM能够直接生成并执行UPDATE语句,而不需要先加载整个记录到内存中。

注意,这种方法假设你的User模型已经正确定义,并且数据库连接已经建立。此外,为了安全起见,确保在生产环境中对输入进行适当的验证和清理,以防止SQL注入攻击。

这种方法不仅简洁,而且性能较高,因为它避免了不必要的数据加载和额外的数据库查询。

回到顶部