使用 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 条记录。
最后,使用方式如下:
 

© 孙东辉 2022 - 2024