本文介绍: 更新和删除操作的前提条件都是要在找到数据的情况下,先要查询到数据才可以做操作。更新的前提的先查询到记录,Save保存所有字段,用于单个记录的全字段更新它会保控所有字段,即使零值也会保存。在更新和删除之前,要利用之前学的查询语句先查询到数据,再去更新,也就是使用find take先去查询所需要的记录,再去更新!
更新和删除操作的前提条件都是要在找到数据的情况下,先要查询到数据才可以做操作。
更新的前提的先查询到记录,Save保存所有字段,用于单个记录的全字段更新,它会保控所有字段,即使零值也会保存。
在更新和删除之前,要利用之前学的查询语句先查询到数据,再去更新,也就是使用find take先去查询所需要的记录,再去更新!
save 更新单条记录并且更新所有字段
用于单条记录的全部字段更新,它会保留所有字段,即使0值也会去更新。
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}
Save + Select 只更新某个字段
只更新某个字段 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
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 <nil>} {2 lucas 10 <nil>} {3 10 <nil>}]
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() 括号里面是一个结构体指针,通过该结构体找到对应的表!
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里面是具体的结构体即可。
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 <nil>} {2 lucas 66 <nil>} {3 66 <nil>}]
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 <nil>} {2 lucas 66 <nil>} {3 lucas 66 <nil>}]
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))
}
原文地址:https://blog.csdn.net/qq_34556414/article/details/132333803
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_45214.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。