類(lèi)似behance的設(shè)計(jì)網(wǎng)站seo顧問(wèn)張智偉
更新和刪除操作的前提條件都是要在找到數(shù)據(jù)的情況下,先要查詢到數(shù)據(jù)才可以做操作。
更新的前提的先查詢到記錄,Save保存所有字段,用于單個(gè)記錄的全字段更新它會(huì)??厮凶侄?#xff0c;即使零值也會(huì)保存。
在更新和刪除之前,要利用之前學(xué)的查詢語(yǔ)句先查詢到數(shù)據(jù),再去更新,也就是使用find take先去查詢所需要的記錄,再去更新!
save 更新單條記錄并且所有字段更新
用于單條記錄的全部字段更新,它會(huì)保留所有字段,即使0值也會(huì)去更新。?
db.Debug().Save(&s)
UPDATE `student` SET `name`='test',`age`=60,`email`='123@qq.com' WHERE `id` = 7
可以看到會(huì)更新零值和多個(gè)字段。?
var s Studentdb.Debug().Take(&s, "name = ?", "test")fmt.Println(s)s.Age = 60db.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}
?Select 只更新某個(gè)字段
只更新某個(gè)字段? select + save? ? ? select是字段的名字name,不是Name
var s Studentdb.Debug().Take(&s, "name = ?", "test")s.Age = 50db.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 批量更新單個(gè)字段
var s []Studentdb.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>}]
更新多個(gè)字段?updates
save是批量更新字段,但是想更新某個(gè)字段,updates可以接受結(jié)構(gòu)體類(lèi)型和map類(lèi)型。
var s []Studentdb.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 []Studentdb.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>}]
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'