如何在 GORM 中获取刚插入记录的主键 ID
技术百科
聖光之護
发布时间:2026-01-23
浏览: 次 使用 gorm 的 `save()` 或 `create()` 方法插入数据后,gorm 会自动将数据库生成的主键(如 mysql 的 `auto_increment` 值)回填到结构体字段中,无需额外查询即可直接访问。
在基于 github.com/jinzhu/gorm(注意:此为旧版 GORM v1;新版为 gorm.io/gorm,但原理一致)的 MySQL 应用中,当你执行一次插入操作时,

✅ 正确用法示例(GORM v1):
type User struct {
Id int `gorm:"primary_key"`
Name string
}
user := User{Name: "jinzhu"}
result := db.Create(&user)
if result.Error != nil {
log.Fatal(result.Error)
}
fmt.Println("新插入用户的 ID:", user.Id) // ✅ 此时 user.Id 已被自动填充⚠️ 注意事项:
- 主键字段必须可导出(首字母大写),且类型需与数据库列兼容(如 int, int64, uint, uint64);
- 若使用 Save(),GORM 会根据主键是否为零值判断执行 INSERT 或 UPDATE;确保新建实例主键为零值(如 int 类型默认为 0);
- 使用 Create() 更语义明确,专用于插入新记录,且会跳过零值主键校验;
- 若主键非自增(如 UUID),需手动赋值或使用钩子(BeforeCreate)生成;
- GORM v2(gorm.io/gorm)行为完全一致,仅导入路径和初始化方式不同,Create() 后同样自动回填主键。
? 总结:无需手动执行 SELECT LAST_INSERT_ID() 或额外 SELECT 查询——GORM 在底层已通过 sql.Result.LastInsertId() 安全获取并注入。这是 ORM 提升开发效率的关键特性之一,合理利用可显著简化代码逻辑并避免竞态风险。
# 这是
# 当你
# 已被
# 跳过
# 为零
# 旧版
# go
# int
# 数据库
# git
# github
# 封装
# 结构体
# select
# mysql
# sql
# 主键
# 合理利用
# 默认为
# 此为
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- MAC如何启用访达侧边栏显示_MAC Finder
- Win11怎么关闭系统推荐内容_Windows11
- Go 中 defer 语句在 goroutine
- c++中如何进行二进制文件读写_c++ read与
- LINUX怎么进行文本内容搜索_Linux gre
- Mac自带的词典App怎么用_Mac添加和使用多语
- php删除数据怎么清空表_truncate与del
- Win11怎么关闭系统透明度_Windows11个
- php订单日志怎么在swoole写_php协程sw
- Mac怎么进行语音输入_Mac听写功能设置与使用【
- Win11怎么设置屏保_Windows 11屏幕保
- Win11此电脑不在桌面上_Windows 11桌
- Win11怎么更改系统语言_Win11中文语言包下
- Windows10怎样设置家长控制_Windows
- Win11蓝牙开关不见了怎么办_Win11蓝牙驱动
- Windows10系统怎么查看运行时间_Win10
- LINUX下如何配置VLAN虚拟局域网_在LINU
- 如何使用Golang配置安全开发环境_防止敏感信息
- C#如何使用XPathNavigator高效查询X
- Python与GPU加速技术_CUDA与Numba
- C#如何序列化对象为XML XmlSerializ
- 如何在包含多值的列中精准搜索指定演员?
- Windows10系统怎么查看显卡驱动_Win10
- c++中如何使用std::variant_c++1
- 如何自定义Windows终端的默认配置文件?(Po
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- Mac如何使用听写功能_Mac语音输入打字【效率技
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- windows如何备份注册表_windows导出和
- mac怎么查看wifi密码_MAC查看已连接WiF
- Win11怎么设置默认输入法 Win11固定中文输
- Win11怎么设置组合键快捷方式_Windows1
- Python日志系统设计与实现_高可观测性架构实战
- 如何有效拦截拼接式恶意域名的垃圾信息
- 如何提升Golang程序I/O性能_Golang
- Python数据挖掘核心算法实践_聚类分类与特征工
- php中常量能用::访问吗_类常量与作用域操作符使
- Win10如何备份驱动程序_Win10驱动备份步骤
- Windows音频驱动无声音原因解析_声卡驱动错误
- Win11怎么设置默认图片查看器_Windows1
- Win11如何设置文件关联 Win11修改特定文件
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- Win11怎么查看wifi信号强度_检测Windo
- 如何使用Golang实现函数指针_函数变量与回调示
- Windows11怎样开启游戏模式_Windows
- Python文件和流处理指南_高效读写大体积数据文
- Python函数接口稳定性_版本演进解析【指导】
- 如何优化Golang内存分配与GC调度_Golan
- c++ stringstream用法详解_c++字
- Win11怎么设置DNS服务器_Windows11

QQ客服