j记录一次gorm 使用协程 插入数据一直报错问题 -Duplicate entry ‘95‘ for key ‘PRIMARY‘ [14.649ms] [rows

问题描述

报错代码如下

func GetSystemInfoSave() {
	var sysInfo SystemInfo
	db := variable.GormDbMysql.Table(dbSystemInfo)
	//表不存在时自动创建表, 写到查询语句前面,不然会报错
	err := db.AutoMigrate(&SystemInfo{})
	if err != nil {
		LogInfo("db  err")
		return
	}
	for {
		sysInfo.CpuPercent = GetcpuPercent()
		sysInfo.CpuCount, _ = cpu.Counts(true)
		sysInfo.MemTotal = GetMemTotal()
		sysInfo.MenUsed = GetMemUsed()
		sysInfo.MemPercent = GetMemPercent()
		sysInfo.DiskTotal = GetdiskTotal()
		sysInfo.DiskUsed = GetdiskUsed()
		sysInfo.DiskPercent = GetdiskPercent()
		timeStr := time.Now().Format("2006-01-02 15:04:05")
		sysInfo.CreatedTime = timeStr
		sysInfo.UpdatedTime = timeStr
		db.Create(&sysInfo)
		time.Sleep(2 * time.Second)
	}
}

报错信息如下

: Duplicate entry '95' for key 'PRIMARY' [14.649ms] [rows
:1] INSERT INTO `system_info` (`created_time`,`updated_time`,`cpu_percent`,`cpu_count`,`mem_total`,`men_used`,`mem_percent`,`disk_total`,`disk_used`,`disk_percent`,`id`) VALUES ('2023-03-26 00:19:00','2023-03-26 00:19:00',1.200000,1
2,24.000000,12.300000,51.000000,1155.000000,977.200000,84.600000,95)\n"}

问题解决

解决问题代码, 改变一行代码位置
将 var sysInfo SystemInfo 代码写入 for循环中, 分析原因是变量 gorm插入数据之后会返回 数据的id给变量systemInfo, 然而变量没被释放,导致再次插入数据报 重复的id错误问题

func GetSystemInfoSave() {
	db := variable.GormDbMysql.Table(dbSystemInfo)
	//表不存在时自动创建表, 写到查询语句前面,不然会报错
	err := db.AutoMigrate(&SystemInfo{})
	if err != nil {
		LogInfo("db  err")
		return
	}
	for {
		var sysInfo SystemInfo
		sysInfo.CpuPercent = GetcpuPercent()
		sysInfo.CpuCount, _ = cpu.Counts(true)
		sysInfo.MemTotal = GetMemTotal()
		sysInfo.MenUsed = GetMemUsed()
		sysInfo.MemPercent = GetMemPercent()
		sysInfo.DiskTotal = GetdiskTotal()
		sysInfo.DiskUsed = GetdiskUsed()
		sysInfo.DiskPercent = GetdiskPercent()
		timeStr := time.Now().Format("2006-01-02 15:04:05")
		sysInfo.CreatedTime = timeStr
		sysInfo.UpdatedTime = timeStr
		db.Create(&sysInfo)
		time.Sleep(2 * time.Second)
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值