You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GORM操作SQLite时自定义ID的autoIncrement自增属性不生效问题

解决方案

问题根因

GORM的AutoMigrate方法默认不会修改已存在表的主键约束,如果你在第一次生成表时没有给ID字段加自增配置,后续补加tag后再次执行AutoMigrate不会更新已有主键的自增属性,这是该问题的最常见诱因。另外低版本GORM对SQL Server的自增主键tag适配存在缺陷,也可能导致配置不生效。

具体解决步骤

  • 首先升级你的GORM到v1.23.0及以上的稳定版本,避免版本兼容问题。
  • 如果你不需要保留现有表的数据,直接删除数据库中已生成的Equipement表,再重新执行AutoMigrate,首次建表时GORM会正确解析primaryKey;autoIncrement标签生成带自增属性的主键。
  • 如果需要保留数据,或者删除表后仍然不生效,可以在ID字段的tag中显式指定SQL Server的自增类型,修改后的结构体写法如下:
// Equipement
type Equipement struct {
   ID int `gorm:"primaryKey;type:int identity(1,1);not null"`
   IP string `gorm:"not null"`
   Username string `gorm:"not null"`
   AuthPass string `gorm:"not null"`
   AuthProtocol string `gorm:"not null"`
   PrivatePass string `gorm:"not null"`
   PrivateProtocol string `gorm:"not null"`
}
  • 验证配置生效:开启GORM的SQL日志输出,执行AutoMigrate时查看生成的建表语句,ID字段是否带有IDENTITY(1,1)标识,有则代表配置生效。开启日志的示例代码如下:
import (
  "gorm.io/gorm/logger"
  "gorm.io/driver/sqlserver"
  "gorm.io/gorm"
)

// 初始化DB时开启日志
db, err := gorm.Open(sqlserver.Open("你的DSN连接串"), &gorm.Config{
  Logger: logger.Default.LogMode(logger.Info),
})

注意事项

插入数据时不要手动为ID字段赋值,GORM会识别到自定义ID赋值跳过自增逻辑,导致自增配置不生效。

内容的提问来源于stack exchange,提问作者uPong26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:06:02