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

批量插入数据时能否获取新增记录的自动生成ID?

当然可以实现!你想要批量插入数据后直接获取刚插入的记录(包括自动生成的ID),不同数据库有对应的简洁方法,我给你列几种常用的方案:

SQL Server 方案

在SQL Server里,你可以直接用OUTPUT子句来返回插入的行,这是最直接的方式,完全符合你的需求:

INSERT INTO MyTable (Name)
OUTPUT inserted.Name, inserted.ID
VALUES ('First'), ('Second'), ('Third'), ('Fourth'), ('Fifth');

执行这条语句后,会立刻返回你刚插入的所有行的Name和自动生成的ID,不需要额外的查询步骤。

MySQL 方案

如果你的MySQL版本是8.0.19及以上,支持RETURNING子句,用法很直观:

INSERT INTO MyTable (Name)
VALUES ('First'), ('Second'), ('Third'), ('Fourth'), ('Fifth')
RETURNING Name, ID;

要是你用的是旧版本MySQL,没法用RETURNING,可以用事务包裹插入和查询(前提是Name字段的值是唯一的,避免拿到无关数据):

START TRANSACTION;
INSERT INTO MyTable (Name) VALUES ('First'), ('Second'), ('Third'), ('Fourth'), ('Fifth');
SELECT Name, ID FROM MyTable WHERE Name IN ('First', 'Second', 'Third', 'Fourth', 'Fifth');
COMMIT;

不过这种方式有局限性,如果Name可能重复,就不太可靠,所以优先升级到支持RETURNING的版本会更稳妥。

PostgreSQL 方案

PostgreSQL原生支持RETURNING子句,写法非常简洁:

INSERT INTO MyTable (Name)
VALUES ('First'), ('Second'), ('Third'), ('Fourth'), ('Fifth')
RETURNING Name, ID;

执行后会直接返回你插入的所有记录,包含自动生成的ID,完美匹配你的需求。

总的来说,优先使用数据库提供的OUTPUT(SQL Server)或RETURNING(MySQL 8.0.19+/PostgreSQL)子句,这样既能保证数据的一致性,又能一步到位拿到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:31