关于gorm的auto_increment无效的问题

关于gorm的auto_increment无效的问题

今天在使用gorm建表时发现,当自己自定义gorm.model时,id字段没法自增了。
id字段的代码具体如下

ID	int	`gorm:"primary_key;type:bigint(20);not null;comment:'ID';" json:"id"`

起初看了这篇博客,明白了需要在配置中增加auto_increment字段才能自增。
[Golang]Gorm使用汇总
但是发现即使写成这样还是无法自增:

ID	int	`gorm:"primary_key;type:bigint(20);not null;comment:'ID';auto_increment;" json:"id"`

接着我查到了这两篇博客:
01-【gorm】golang常用库:gorm基本使用
Golang持久化框架 gorm 创建表时 auto_increment 不生效问题
根据博客意思,我猜想是bigint的问题,所以在bigint上纠结了好久。
直到最后,我找到了这篇博客:
GORM升级V2过程中的注意事项
这里直接引用一下博客中的代码段

type API struct {
    
    
    Id      int64  `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`      // 主键自增 成功
    Id      int64  `json:"id" gorm:"column:id;primaryKey;AUTO_INCREMENT"`       // 主键自增 成功
    Id      int64  `json:"id" gorm:"column:id;primaryKey;autoIncrement"`        // 主键自增 成功
    Id      int64  `json:"id" gorm:"column:id;primary_key;autoIncrement"`       // 主键自增 成功

    Id      int64  `json:"id" gorm:"column:id;type:bigint(20);primaryKey;auto_increment"`   // 主键不自增 失败
    Id      int64  `json:"id" gorm:"column:id;type:bigint(20);primaryKey;autoIncrement"`    // 主键不自增 失败
    Id      int64  `json:"id" gorm:"column:id;type:bigint(20);primaryKey;AUTO_INCREMENT"`   // 主键不自增 失败

    Id      int64  `json:"id" gorm:"column:id;type:bigint(20) auto_increment;primary_key"`   // 主键自增 成功
    Id      int64  `json:"id" gorm:"column:id;type:bigint(20) autoIncrement;primaryKey"`     // Error 1064: You have an error in your SQL syntax; 
    Id      int64  `json:"id" gorm:"column:id;type:bigint(20) AUTO_INCREMENT;primaryKey"`    // 主键自增 成功

    Id      int64  `json:"id" gorm:"column:id;primaryKey;type:bigint(20) autoIncrement;"`    // Error 1064: You have an error in your SQL syntax;
    Id      int64  `json:"id" gorm:"column:id;primaryKey;type:bigint(20) auto_increment;"`   // 主键自增 成功
    Id      int64  `json:"id" gorm:"column:id;type:bigint(20) auto_increment;primaryKey"`    // 主键自增 成功
}

通过反复比较,我明白了问题所在,auto_increment并不是一个单独的字段,而是type中的一个值。如果在type后面加个分号再加auto_increment,如这样:type:bigint(20);auto_increment;,那么自增就无法成功设置。想要自增必须设置成这样:type:bigint(20) auto_increment;,将auto_increment放在type里面,才能成功自增。
最终id字段的代码如下:

ID	int	`gorm:"primary_key;type:bigint(20) auto_increment;not null;comment:'ID';" json:"id"`

猜你喜欢

转载自blog.csdn.net/qq1261275789/article/details/123606229