当前位置: 首页 > news >正文

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 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 只更新某个字段


只更新某个字段  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 批量更新单个字段


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

更新多个字段 updates


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

	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'
http://www.lryc.cn/news/133600.html

相关文章:

  • springBoot 配置文件引入 redis 的相关参数说明
  • Docker的使用心得:简化开发与部署的利器
  • vue3 基于element plus对el-pagination进行二次封装
  • RuntimeError: result type Float can‘t be cast to the desired output type __int64报错解决方法
  • 解析Python爬虫常见异常及处理方法
  • 详解Spring的循环依赖问题、三级缓存解决方案源码分析
  • oracle分析函数学习
  • 代码随想录训练营day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 v...
  • C# Thread用法
  • 新榜 | CityWalk本地生活商业价值洞察报告
  • LVS负载均衡集群-NAT模式部署
  • C++学习笔记总结练习:effective 学习日志
  • Vue教程(五):样式绑定——class和style
  • 开放网关架构演进
  • torch一些操作
  • ICCV23 | Ada3D:利用动态推理挖掘3D感知任务中数据冗余性
  • 软件工程模型-架构师之路(四)
  • ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹
  • Redis中的有序集合及其底层跳表
  • js 小程序限流函数 return闭包函数执行不了
  • 【数据结构】堆的初始化——如何初始化一个大根堆?
  • 【韩顺平 零基础30天学会Java】程序流程控制(2days)
  • 从入门到精通Python隧道代理的使用与优化
  • 19万字智慧城市总体规划与设计方案WORD
  • [赛博昆仑] 腾讯QQ_PC端,逻辑漏洞导致RCE漏洞
  • python Requests
  • 【深入解析:数据结构栈的魅力与应用】
  • 安卓机显示屏的硬件结构
  • 基于swing的超市管理系统java仓库库存进销存jsp源代码mysql
  • 常用系统命令