XORM中主键与自增标识必须同时用pk和autoincr标签声明,字段类型需为整型,且数据库表对应字段须已设AUTO_INCREMENT;缺一不可,否则Insert失败或主键操作异常。

在 XORM 框架中正确设置主键与自增标识,是保证结构体能成功映射并自动插入 ID 的前提,否则调用 Insert() 时可能报错或写入 0 值。
基础写法:pk + autoincr 必须同时存在
第一步:在结构体字段的 xorm tag 中,【必须同时声明 pk 和 autoincr】,缺一不可。
第二步:字段类型需为整型(int64、int32、int 等),不能是 string 或指针类型,否则 autoincr 不生效。
第三步:确保数据库表对应字段已设为 AUTO_INCREMENT(MySQL)或 SERIAL(PostgreSQL),XORM 不会自动为你加该属性,仅依赖已有表结构。
常见错误写法及后果
方法一:只写 pk 不写 autoincr
→ 插入时 ID 字段值为 0,数据库报主键冲突或写入失败(因未触发自增逻辑)。
方法二:只写 autoincr 不写 pk
→ XORM 无法识别该字段为主键,Get()、Update()、Delete() 等操作将无主键条件,可能全表误操作。
方法三:用 id int64 `xorm:"pk"` 但数据库表字段未设自增
→ 插入失败,MySQL 报错 Field 'id' doesn't have a default value。
复合主键场景下 autoincr 的限制
XORM 不支持复合主键中任一字段启用 autoincr。【只要结构体中有多个 pk 字段,就绝对不能加 autoincr】,否则 Sync2 或 Insert 会 panic。
例如:ID1 int64 `xorm:"pk"` 和 ID2 string `xorm:"pk"` 共存 → 两个都不得加 autoincr,ID 值必须由业务层显式赋值。











