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

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

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

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

代码语言: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 归档