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

MySQL批量插入数据时如何正确获取已插入记录的ID

报错原因

OUTPUT INSERTED.id 是 SQL Server 支持的返回插入值语法,MySQL 没有这个语法规则,因此触发1064语法错误。

正确获取批量插入ID的方法

首先区分两种场景:

  • 如果你像示例SQL一样,插入时手动给id字段传入了固定值,那插入记录的id就是你自己传入的参数,不需要额外查询获取。
  • 如果id是AUTO_INCREMENT自增主键,插入时不手动传id值,按以下方式获取:
  1. 修正插入语句,删掉末尾不兼容的OUTPUT INSERTED.id,正常执行批量插入:
INSERT INTO sometable (candidateid, createdby)
VALUES 
('3175','1425'),
('3175','1425'),
('3175','1425'),
('3176','1425'),
('3176','1425'),
('3176','1425');
  1. 插入执行完成后,在同一个数据库连接内立刻执行查询语句:
SELECT 2041706;

这个查询返回的是本次批量插入生成的第一条自增ID。
3. MySQL默认配置下,同一条批量插入语句生成的自增ID是连续的,结合本次插入的总记录数,就可以推算出所有插入记录的ID:比如本次插入6条数据,2041706返回100,那么6条记录的自增ID依次为100、101、102、103、104、105。

注意事项
  • 必须保证插入操作和2041706查询在同一个数据库连接/会话中执行,中间不能穿插其他插入类写操作,否则拿到的ID会是其他操作生成的错误值。
  • 绝大多数编程语言的MySQL驱动、ORM框架(比如JDBC、Node.js mysql驱动、MyBatis等)封装的批量插入返回ID能力,本质都是基于上述机制实现,不需要额外手写SQL拼接。
  • 如果你的MySQL实例修改过默认的innodb_autoinc_lock_mode配置导致自增ID不连续,上述推算逻辑会失效,这种场景可以根据业务唯一键反查对应ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:48:58