Golang Gorm 更新字段 save、update、updates

2024-04-10 1612阅读

更新和删除操作的前提条件都是要在找到数据的情况下,先要查询到数据才可以做操作。

更新的前提的先查询到记录,Save保存所有字段,用于单个记录的全字段更新,它会保控所有字段,即使零值也会保存。

在更新和删除之前,要利用之前学的查询语句先查询到数据,再去更新,也就是使用find take先去查询所需要的记录,再去更新!

save 更新单条记录并且更新所有字段


用于单条记录的全部字段更新,它会保留所有字段,即使0值也会去更新。 

db.Debug().Save(&s)

UPDATE `student` SET `name`='test',`age`=60,`email`='123@qq.com' WHERE `id` = 7

可以看到会更新零值和多个字段。 

	var s Student
	db.Debug().Take(&s, "name = ?", "test")
	fmt.Println(s)
	s.Age = 60
	db.Debug().Save(&s)
	fmt.Println(s)
[1.423ms] [rows:1] SELECT * FROM `student` WHERE name = 'test' LIMIT 1
{7 test 110 0xc000209140}   
                                        
[5.531ms] [rows:1] UPDATE `student` SET `name`='test',`age`=60,`email`='123@qq.com' WHERE `id` = 7
{7 test 60 0xc000209140} 

Golang Gorm 更新字段 save、update、updates

Save + Select 只更新某个字段


Golang Gorm 更新字段 save、update、updates

只更新某个字段  select + save      select是字段的名字name,不是Name

	var s Student
	db.Debug().Take(&s, "name = ?", "test")
	s.Age = 50
	db.Debug().Select("age").Save(&s)
	fmt.Println(s)
[2.220ms] [rows:1] SELECT * FROM `student` WHERE name = 'test' LIMIT 1
[8.689ms] [rows:1] UPDATE `student` SET `age`=50 WHERE `id` = 7 

update 更新单个字段 find+update、take+update、model+where+update


Golang Gorm 更新字段 save、update、updates

model 是声明映射关系的对象类型,通过这个对象类型,找到表名和字段 

	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Update("age", 10)
	fmt.Println(s)
[1.258ms] [rows:3] SELECT * FROM `student` WHERE `student`.`id` IN (1,2,3)
                      
[7.232ms] [rows:3] UPDATE `student` SET `age`=10 WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 10 } {2 lucas 10 } {3  10 }] 

Take + Update 

var s Student
db.Debug().Take(&s, "name = ?", "lucas").Update("age", 18)
UPDATE `student` SET `age`=18 WHERE name = 'lucas' AND `id` = 3 LIMIT 1

Model + Where + Update 

model() 括号里面是一个结构体指针,通过该结构体找到对应的表! 

var s Student
db.Debug().Model(&s).Where("name = ?", "lucas").Update("age", 106)
[7.091ms] [rows:1] UPDATE `student` SET `age`=106 WHERE name = 'lucas'

 

更新多个字段 updates  Model(&x{}) + Where + Updates


save是批量更新字段,但是想更新某个字段,updates可以接受结构体类型和map类型。

updates之前,你必须先查找,你这里可以使用take + updates,find + updates,model + where等等,updates里面是具体的结构体即可。 

Golang Gorm 更新字段 save、update、updates

	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Updates(&Student{Age: 66})
	fmt.Println(s)
[6.909ms] [rows:3] UPDATE `student` SET `age`=66 WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 66 } {2 lucas 66 } {3  66 }]  
	var s []Student
	db.Debug().Find(&s, []int{1, 2, 3}).Updates(map[string]any{
		"name": "lucas",
	})
[4.648ms] [rows:1] UPDATE `student` SET `name`='lucas' WHERE `student`.`id` IN (1,2,3) AND `id` IN (1,2,3)
[{1 lucas 66 } {2 lucas 66 } {3 lucas 66 }]  

实际使用中的一段代码

	if err := mysql.DB.Model(&model.Book{}).Where("id = ?", book.ID).Updates(book).Error; err != nil {
		logger.Error(fmt.Sprintf("更新book失败:%v", err))
		return errors.New(fmt.Sprintf("更新book失败:%v", err))
	}
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]