插入许多行,LAST_INSERT_ID 返回 1 [重复]

Posted

技术标签:

【中文标题】插入许多行,LAST_INSERT_ID 返回 1 [重复]【英文标题】:insert many rows, LAST_INSERT_ID return 1 [duplicate] 【发布时间】:2019-08-23 05:23:43 【问题描述】:

有:

1. create DB
2. create Table
3. insert 3 rows
4. select LAST_INSERT_ID()

这里测试代码:

DROP DATABASE IF EXISTS TEST;
CREATE DATABASE TEST;
USE TEST;
CREATE TABLE test (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        age INT
    );

INSERT INTO test (age) VALUES (1), (2), (3);

SELECT LAST_INSERT_ID();

为什么 LAST_INSERT_ID() 返回 1 ? 例外:3

如何获取有效的 LAST_INSERT_ID() ?

【问题讨论】:

mysql 服务器版本:5.7.27-0ubuntu0.18.04.1 (Ubuntu) 【参考方案1】:

MySQL documentation 清楚地解释了这种行为:

没有参数,LAST_INSERT_ID() 返回一个 BIGINT UNSIGNED(64 位)值,表示 第一个(强调我的)自动生成的值成功插入 AUTO_INCREMENT 列作为最近的结果执行 INSERT 语句。如果没有成功插入任何行,则 LAST_INSERT_ID() 的值保持不变。

插入时自动递增序列生成的第一个值是 1,而不是 2 或 3,因此返回值 1。

我认为您的困惑在于LAST_INSERT_ID 这个名字。 “最后”部分是指最近的插入 语句,而不是该插入中最近的 id 值。

【讨论】:

以上是关于插入许多行,LAST_INSERT_ID 返回 1 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何选择last_insert_id?

Mysql 存储过程返回 LAST_INSERT_ID 为零

Last_insert_id 为带有字母和数字的自动递增列返回 0

是否可以从不同的数据库中获取 LAST_INSERT_ID() ?

mysql 插入数据如何防止重复

mysql @@identity 与 sql-server last_insert_id()