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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉不拉斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值