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

2023-05-16

文章目录

  • 问题描述
  • 问题解决

问题描述

报错代码如下

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

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐