|
|
|
|
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)
|
|
|
|
|
}
|