插入许多行,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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Mysql 存储过程返回 LAST_INSERT_ID 为零
Last_insert_id 为带有字母和数字的自动递增列返回 0