使用 GORM 一次更新多行多列的两种方式
date
Aug 23, 2023
slug
更新多行的多列,且每一列的值都不相同,该怎么做呢?
status
Published
tags
Go
Gorm
summary
Updates
& Clauses
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
本文介绍了使用 GORM 进行一次更新多行多列的两种方式。当修改的结果相同时,可以使用
BatchUpdates
方法进行更新;当修改的结果不同时,可以使用 Clauses
方法添加 ON CONFLICT
子句,定义要更新的列,并使用 CreateInBatches
方法将数据分批插入数据库。Status
有时,业务场景里需要批量修改数据,当修改的结果相同时,非常简单,只需要使用下面的
BatchUpdates
方法进行更新就可以:但如果修改的结果不同呢?比如,我想对 ID 为 1 的数据,修改 Name 为 Tom, ID 为 2 的 数据,修改 Name 为 Jerry, ID 为 3 的数据,修改 Name 为大壮。该怎么做呢?GORM 其实也提供了对应的方法,方法封装如下:
其中
.Clauses(clause.OnConflict{...})
是使用 GORM 提供的 Clauses
方法来添加一个 ON CONFLICT
子句,用于处理冲突,也就是根据 ID 进行数据处理, DoUpdates: clause.AssignmentColumns([]string{"name"})
定义了在冲突发生时要更新的列,这里是更新 name
列,最后,使用 GORM 提供的 CreateInBatches
方法将数据分批插入数据库,每批包含最多 1000 条记录。最后,使用方式如下: