插入许多行,LAST_INSERT_ID返回1

时间:2019-08-23 05:23:43

标签: mysql sql last-insert-id

拥有:

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()?

1 个答案:

答案 0 :(得分:2)

MySQL documentation清楚地解释了此行为:

  

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

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

我认为您对LAST_INSERT_ID的名字感到困惑。 “最后”部分是指最新的插入声明,而不是该插入中的最新id值。