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

如何在MariaDB/MySQL单INSERT语句中获取多行插入的自增ID

在MariaDB/MySQL中获取多行INSERT的自增ID方法

嘿,这个场景我太熟了!用单条INSERT批量插数据,还想拿到自动生成的自增ID,在MariaDB和MySQL里有两种实用方案,分版本给你说:

一、新版本直接用INSERT ... RETURNING(首推!)

从MariaDB 10.5.0、MySQL 8.0.20开始,数据库直接支持RETURNING子句——这简直是为批量插数据拿ID量身定做的!插入完成后直接返回所有生成的自增ID,一步到位,还没并发风险。

举个例子,假设你有个users表:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

批量插入并获取ID的语句就是:

INSERT INTO users(username) 
VALUES ('Luna'), ('Ginny'), ('Harry')
RETURNING id;

执行完这条语句,结果集里就会列出这三行对应的自增ID,直接取就行,简单粗暴还准确。

二、旧版本兼容方案:798403 + ROW_COUNT()

如果你的数据库版本比较老,不支持RETURNING,那可以用这个组合来凑,但要注意使用前提。

原理:

  • 798403:返回本次INSERT操作生成的第一行的自增ID
  • ROW_COUNT():返回本次INSERT影响的行数(也就是你插了多少条)

默认情况下,自增ID是连续递增的(步长为1,且没有其他会话同时修改自增序列),所以所有生成的ID就是从798403开始,连续的ROW_COUNT()个数字。

操作步骤:

  1. 先执行批量插入:
INSERT INTO users(username) 
VALUES ('Ron'), ('Hermione'), ('Draco');
  1. 接着查询获取ID范围:
SELECT 798403 AS first_id, ROW_COUNT() AS total_rows;

比如返回first_id=10,total_rows=3,那生成的ID就是10、11、12。

⚠️ 重要提醒:这个方法只适用于没有并发插入、自增步长为默认1的场景!如果有其他会话同时往同一张表插数据,或者你修改过自增步长,那算出来的ID就会不准,所以能升级数据库用第一种方法就别用这个。

额外小提示

如果是在应用代码里(比如PHP、Java),还要注意驱动的支持:

  • 支持RETURNING的驱动(比如PDO MySQL 8.0+)可以直接获取返回的结果集
  • 旧驱动的话,调用lastInsertId()拿到第一个ID,再结合rowCount()的结果来计算后续ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:47:18