golang,gorm实现mysql的upsert
1.使用gorm的原生mysql支持
db.Exec("insert into tbl_referral_link_member_retain
(report_date,referral_link_id,retain_count)
VALUES
(?,?,?)
ON DUPLICATE KEY UPDATE
retain_count = ?", "2024-04-23",1,gorm.Expr("retain_count + ?", 1))
2.使用clauses
linkRetain := report.ReferralLinkMemberRetain{
ReportDate: reportDate,
ReferralLinkId: int32(int_link_id),
RetainCount: uv,
}
DbReport.Clauses(
clause.OnConflict{
Columns: []clause.Column{{Name: "referral_link_id"}, {Name: "report_date"}},
DoUpdates: clause.Assignments(
map[string]interface{}{
"retain_count": gorm.Expr("retain_count+ ?", uv),
"updated_at": nowFormat,
},
),
},
).Create(&linkRetain)