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

Goweb---Gorm操作数据库(三) 更新

1.表结构

在这里插入图片描述

2.表初始数据(只是我的)

在这里插入图片描述

3.保存操作

保存 是一个组合函数。 如果保存值不包含主键,它将执行 Create,否则它将执行 Update (包含所有字段)。

3.1 语句1 :db.Save(&User{Name: “jinzhu”, Age: 100})

上面的语句相当于:

 INSERT INTO `users` (`name`,`age`,`birthday`) VALUES ("jinzhu",100,"0000-00-00 00:00:00");

代码:

package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	ID       int    `gorm:"column:id"`
	Name     string `gorm:"column:name"`
	Age      int    `gorm:"column:age"`
	Birthday string `gorm:"column:birthday"`
}

func main() {

	dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("连接数据库失败:", err)
	}

	db.Save(&User{Name: "jinzhu", Age: 100})
	
	

}

结果:
在这里插入图片描述

上面的语句若改为
db.Save(&User{ID: 1, Name: “jinzhu”, Age: 100})
由于有了主键,因此会更新表中主键ID为1的字段,也就是相当于执行下面的语句:
UPDATE users SET name=“jinzhu”,age=100,birthday=“0000-00-00 00:00:00” WHERE `id’ = 1

4.更新操作
4.1更新单个列

当使用 Update 更新单列时,需要有一些条件,否则将会引起ErrMissingWhereClause 错误,查看 阻止全局更新 了解详情。 当使用 Model 方法,并且它有主键值时,主键将会被用于构建条件

下面的图片都是一个操作对应一个效果
在这里插入图片描述

在这里插入图片描述

测试代码
package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	ID       int    `gorm:"column:id"`
	Name     string `gorm:"column:name"`
	Age      int    `gorm:"column:age"`
	Birthday string `gorm:"column:birthday"`
}

func main() {

	dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("连接数据库失败:", err)
	}
	// 根据条件更新
	//db.Model(&User{}).Where("age = ?", 18).Update("age", 30)
	// UPDATE users SET age=30  WHERE age=18;

	var user User
	user.ID = 2
	db.Model(&user).Update("age", 40)

}

4.2 更新选定字段

db.Model(&user).Select(“name”).Updates(map[string]interface{}{“name”: “hello”, “age”: 18})

在这里插入图片描述

db.Model(&user).Omit(“name”).Updates(map[string]interface{}{“name”: “Tom”, “age”: 66})

在这里插入图片描述

db.Model(&user).Where(“id = ?”, 0).Select(“*”).Updates(User{ID: 1, Name: “jinzhu”, Age: 0})

在这里插入图片描述

测试代码
package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	ID       int    `gorm:"column:id"`
	Name     string `gorm:"column:name"`
	Age      int    `gorm:"column:age"`
	Birthday string `gorm:"column:birthday"`
}

func main() {

	dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println("连接数据库失败:", err)
	}

	var user User
	// 选择 Map 的字段
	// User 的 ID 是 `2`:
	//db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18})
	// UPDATE users SET name='hello' WHERE id=2;

	//db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "Tom", "age": 66})
	// UPDATE users SET age=66 WHERE id=2;

	// 选择所有字段(选择包括零值字段的所有字段)
	db.Model(&user).Where("id = ?", 0).Select("*").Updates(User{ID: 1, Name: "jinzhu", Age: 0})

}


http://www.kler.cn/news/326456.html

相关文章:

  • 数学建模研赛总结
  • 【动态规划-分组背包】力扣1155. 掷骰子等于目标和的方法数
  • 并发编程三大特性(原子性、可见性、有序性)
  • 每日一题:⻓度最⼩的⼦数组
  • 计算机毕业设计 Java教务管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • python魔法(python高级magic方法进阶)
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十五章 Linux 文件系统概念
  • 基于大数据的二手电子产品需求分析及可视化系统
  • open-resty 服务安装kafka插件
  • 深入理解EVM(以太坊虚拟机)及其工作原理,因为这将直接影响智能合约的开发。
  • 智融-SW6003 双向移动电源IC
  • P3131 [USACO16JAN] Subsequences Summing to Sevens S Python题解
  • idea使用技巧与插件推荐
  • 序列化方式五——ProtoStuff
  • JSON 教程
  • 什么Python库处理大量数据比较快?
  • Oracle 性能优化的高频面试题及答案
  • MySQL和Doris开窗函数LAG执行时的区别
  • PHP入门必看:从基础语法到实际应用,一文掌握Web开发的必备技能!
  • X-Spreadsheet:Web端Excel电子表格工具库
  • “AI+Security”系列第3期(五):AI技术在网络安全领域的本地化应用与挑战
  • 使用 Colly 在 Golang 中进行网页抓取的步骤
  • Rust Web自动化Demo
  • 《动手学深度学习》笔记2.4——神经网络从基础→进阶 (文件读写-保存参数和模型)
  • 堆的数组实现
  • nginx的安装和使用
  • 网页前端开发之Javascript入门篇(1/9):变量
  • 千益畅行,旅游创业新模式的创新与发展
  • 【Python报错已解决】ModuleNotFoundError: No module named ‘tensorflow‘
  • [每周一更]-(第117期):硬盘分区表类型:MBR和GPT区别