前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GO语言基础之gorm操作MySQL修改数据

GO语言基础之gorm操作MySQL修改数据

原创
作者头像
墨紫羽墨
修改2022-03-28 09:58:33
7520
修改2022-03-28 09:58:33
举报
文章被收录于专栏:FutureTester

数据库连接就是使用之前的连接,下面就直接展示修改的源码

代码语言:go
复制
package mysql

import (
	"math/rand"
	"strconv"
	"testing"
	"time"
)

type Usergamedata struct {
	UserId     uint32 `gorm:"column:USER_ID;PRIMARY_KEY"`
	UserType   string `gorm:"column:USER_TYPE"`
	UserWealth uint32 `gorm:"column:USER_WEALTH"`
	Signature  string `gorm:"column:SIGNATURE"`
}

func (Usergamedata) TableName() string {
	return "usergamedata"
}

func updateUsergamedataWealth() {
	// 更新一个字段
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID = ?", 1187918).Update("USER_WEALTH", rand.Intn(int(time.Now().Unix()))).Error
	if err != nil {
		panic(err)
	}
}

func updateUsergamedata() {
	// 更新部分字段
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID = ?", 1187918).Updates(&Usergamedata{
		UserType:   "Normal",
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
	}).Error
	if err != nil {
		panic(err)
	}
}

func updateUserwealth() {
	// 更新部分字段,只更新非空字段
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID = ?", 1187918).Updates(&Usergamedata{
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
		Signature:  "",
	}).Error
	if err != nil {
		panic(err)
	}
}

func updateUserwealthMap() {
	// 更新部分字段,map
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID = ?", 1187918).Updates(map[string]interface{}{
		"USER_WEALTH": uint32(rand.Intn(int(time.Now().Unix()))),
		"SIGNATURE":   string(strconv.Itoa(rand.Intn(int(time.Now().Unix())))),
	}).Error
	if err != nil {
		panic(err)
	}
}

func saveUserWealthAll() {
	// 更新全部字段,save更新时,有该数据则修改,无该数据则添加
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Save(&Usergamedata{
		UserId:     1187918,
		UserType:   "Normal",
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
		Signature:  string(strconv.Itoa(rand.Intn(int(time.Now().Unix())))),
	}).Error
	if err != nil {
		panic(err)
	}
}

func saveUserWealth() {
	// 更新全部字段,有字段为空,字段为空时,自动更新为0或""等默认值
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Save(&Usergamedata{
		UserId:     1187918,
		UserType:   "Normal",
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
	}).Error
	if err != nil {
		panic(err)
	}
}

func updateUsergamedataSelect() {
	// 更新选中字段,没有在select中的字段不更新
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Select("SIGNATURE").Where("USER_ID = ?", 1187918).Updates(Usergamedata{
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
		Signature:  "",
	}).Error
	if err != nil {
		panic(err)
	}
}

func updateUserwealthIn() {
	// 更新部分字段,只更新非空字段
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID IN ?", []int{1187918, 1098838}).Updates(&Usergamedata{
		UserWealth: uint32(rand.Intn(int(time.Now().Unix()))),
		Signature:  string(strconv.Itoa(rand.Intn(int(time.Now().Unix())))),
	}).Error
	if err != nil {
		panic(err)
	}
}

func updateUsergamedataWealthErr() {
	// 更新一个字段,不加where条件时会被阻断,如果需要更新全部数据,可以加where(1=1)
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Update("USER_WEALTH", 9000).Error
	if err != nil {
		panic(err)
	}
}

func updateUsergamedataWealthColumn() {
	// 更新,column
	db := sqlDb()
	rand.Seed(time.Now().UnixNano())
	err := db.Model(&Usergamedata{}).Where("USER_ID = ?", 1187918).UpdateColumn("USER_WEALTH", uint32(rand.Intn(int(time.Now().Unix())))).Error
	if err != nil {
		panic(err)
	}
}

func TestUpdate(t *testing.T) {
	updateUsergamedataWealth()
	updateUsergamedata()
	updateUserwealth()
	updateUserwealthMap()
	saveUserWealthAll()
	saveUserWealth()
	updateUsergamedataSelect()
	updateUserwealthIn()
	updateUsergamedataWealthErr()
	updateUsergamedataWealthColumn()
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档