package gormExample import ( "fmt" "gorm.io/gorm" "log" ) func UpdatePK() { var c Content // 无主键 if err := DB.Save(&c).Error; err != nil { log.Fatalln(err) } // [12.300ms] [rows:1] INSERT INTO `msb_content` (`created_at`,`updated_at`,`deleted_at`,`subject`,`likes`,`views`,`publish_time`,`author_id`) VALUES ('2023-04-21 16:42:35.089','2023-04-21 16:42:35.089',NULL,'',0,0,'2023-04-21 16:42:35.089',0) ON DUPLICATE KEY UPDATE `updated_at`='2023-04-21 16:42:35.089',`deleted_at`=VALUES(`deleted_at`),`subject`=VALUES(`subject`),`likes`=VALUES(`likes`),`views`=VALUES(`views`),`publish_time`=VALUES(`publish_time`),`author_id`=VALUES(`author_id`) fmt.Printf("%+v\n", c) // 具有主键ID if err := DB.Save(&c).Error; err != nil { log.Fatalln(err) } // [9.316ms] [rows:1] UPDATE `msb_content` SET `created_at`='2023-04-21 16:45:22.294',`updated_at`='2023-04-21 16:45:22.306',`deleted_at`=NULL,`subject`='',`likes`=0,`views`=0,`publish_time`='2023-04-21 16:45:22.293',`author_id`=0 WHERE `msb_content`.`deleted_at` IS NULL AND `id` = 61 fmt.Printf("%+v\n", c) } func UpdateWhere() { // 更新的字段值数据 // map推荐 values := map[string]any{ "subject": "Where Update Row", "likes": 10001, } // 执行带有条件的更新 result := DB.Model(&Content{}). //Omit("updated_at"). Where("likes > ?", 100). Updates(values) if result.Error != nil { log.Fatalln(result.Error) } // 获取更新结果,更新的记录数量(受影响的记录数) // 指的是修改的记录数,而不是满足条件的记录数 log.Println("updated rows num: ", result.RowsAffected) } func UpdateNoWhere() { // 更新的字段值数据 // map推荐 values := map[string]any{ "subject": "Where Update Row", "likes": 1001, } // 执行带有条件的更新 result := DB.Model(&Content{}). // 全局更新 Where("1=1"). Updates(values) if result.Error != nil { log.Fatalln(result.Error) } // 获取更新结果,更新的记录数量(受影响的记录数) // 指的是修改的记录数,而不是满足条件的记录数 log.Println("updated rows num: ", result.RowsAffected) } func UpdateExpr() { // 更新的字段值数据 // map推荐 values := map[string]any{ "subject": "Where Update Row", // 值为表达式计算的结果时,使用Expr类型 "likes": gorm.Expr("likes + ?", 10), //"likes": "likes + 10", // Incorrect integer value: 'likes + 10' for column 'likes' at row 1 } // 执行带有条件的更新 result := DB.Model(&Content{}). Where("likes > ?", 100). Updates(values) // [17.011ms] [rows:51] UPDATE `msb_content` SET `likes`=likes + 10,`subject`='Where Update Row',`updated_at`='2023-04-21 17:28:45.498' WHERE likes > 100 AND `msb_content`.`deleted_at` IS NULL if result.Error != nil { log.Fatalln(result.Error) } // 获取更新结果,更新的记录数量(受影响的记录数) // 指的是修改的记录数,而不是满足条件的记录数 log.Println("updated rows num: ", result.RowsAffected) }