如何在 GORM 中获取刚插入记录的主键 ID

发布时间 - 2026-01-23 00:00:00    点击率:

使用 gorm 的 `save()` 或 `create()` 方法插入数据后,gorm 会自动将数据库生成的主键(如 mysql 的 `auto_increment` 值)回填到结构体字段中,无需额外查询即可直接访问。

在基于 github.co

m/jinzhu/gorm(注意:此为旧版 GORM v1;新版为 gorm.io/gorm,但原理一致)的 MySQL 应用中,当你执行一次插入操作时,常需立即获取新记录的主键 ID(等价于 MySQL 的 LAST_INSERT_ID() 函数)。GORM 已对此做了良好封装:只要结构体中定义了符合约定的主键字段(如 Id、ID 或带 gorm:"primaryKey" 标签的字段),调用 Create() 或 Save() 后,该字段会被自动赋值。

✅ 正确用法示例(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 提升开发效率的关键特性之一,合理利用可显著简化代码逻辑并避免竞态风险。


# mysql  # git  # go  # github  # sql  # 封装  # select  # 结构体  # int  # 数据库  # 主键  # 为零  # 这是  # 已被  # 当你  # 此为  # 跳过  # 旧版  # 合理利用  # 默认为 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 原生JS实现图片轮播切换效果  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  详解vue.js组件化开发实践  如何在宝塔面板中修改默认建站目录?  Laravel如何实现数据库事务?(DB Facade示例)  如何用狗爹虚拟主机快速搭建网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Windows Hello人脸识别突然无法使用  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  香港网站服务器数量如何影响SEO优化效果?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在橙子建站中快速调整背景颜色?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  HTML 中动态设置元素 name 属性的正确语法详解  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何在阿里云部署织梦网站?  如何快速搭建高效简练网站?  轻松掌握MySQL函数中的last_insert_id()  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何快速生成专业多端适配建站电话?  如何在香港免费服务器上快速搭建网站?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  大连 网站制作,大连天途有线官网?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何用西部建站助手快速创建专业网站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel如何实现API版本控制_Laravel版本化API设计方案  JS中对数组元素进行增删改移的方法总结  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何用wdcp快速搭建高效网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)