批量插入数据时能否获取新增记录的自动生成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
相关产品推荐
相关产品推荐

