Golang Gorm 更新字段save、update、updates

  目录

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

  更新的前提的先查询到记录,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}

  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

  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里面是具体的结构体即可。

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

  }

  到此这篇关于Golang Gorm 更新字段save、update、updates的文章就介绍到这了,更多相关Golang Gorm 更新字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  您可能感兴趣的文章: