【问题标题】:insert many rows, LAST_INSERT_ID return 1 [duplicate]插入许多行,LAST_INSERT_ID 返回 1 [重复]
【发布时间】:2023-03-09 14:56:01
【问题描述】:

有:

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)

标签: mysql sql last-insert-id


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 2012-11-17
    • 2015-05-14
    • 2011-10-21
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多