如何在 PHP 中从 AUTO_INCREMENT 列中为每行检索生成的 PRIMARY KEY,并在 MySQL 中插入多行?

Posted

技术标签:

【中文标题】如何在 PHP 中从 AUTO_INCREMENT 列中为每行检索生成的 PRIMARY KEY,并在 MySQL 中插入多行?【英文标题】:How retrieve in PHP the generated PRIMARY KEY from an AUTO_INCREMENT column for each row with an INSERT of multiple rows in MySQL? 【发布时间】:2013-03-19 10:10:24 【问题描述】:

我有一个带有插入多行语法的 INSERT:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

使用 mysql 函数 LAST_INSERT_ID() 可以检索生成的 AUTO_INCREMENT 列的主键,但是如何检索行 (1,2,3)、(4,5,6) AND (7,8) 的主键,9) 插入一个唯一的 SQL INSERT 指令?

编程语言为 php 5.4.13 和 MySQL Server 5.6.10

【问题讨论】:

假设您的增量为 1,LAST_INSERT_ID 为您提供值的第一个 pk,并且在一个查询中插入多个值可防止其他写入,直到您完成您可以预测后续 pk 的内容 @TysonoftheNorthwest 可能会从单个插入中获取非连续的 auto_increment 值 - 这取决于数据库引擎和配置。 @Vatev 我专门询问 MySQL。 数据库引擎是指 InnoDB、MyISAM.... 【参考方案1】:

您可以在循环中插入记录,并在插入每条记录时通过调用 last_insert_id() 将自动增量 id 存储在数组中。因此,您可以在任何需要的地方使用插入的 id 数组。

【讨论】:

【参考方案2】:

无法检索多个生成的 auto-inc 变量。调用 LAST_INSERT_ID() 会返回由最后一个 INSERT 生成的 first 值。

要获取所有值,一次插入一行,然后在每行之后调用 LAST_INSERT_ID()。这会导致更多开销,但这是唯一的解决方法。

如果您正在执行INSERT...SELECTLOAD DATA INFILE,这尤其是一个问题,批量生成许多新的 id 值。

另见MySQL LAST_INSERT_ID() used with multiple records INSERT statement

【讨论】:

以上是关于如何在 PHP 中从 AUTO_INCREMENT 列中为每行检索生成的 PRIMARY KEY,并在 MySQL 中插入多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WAMPServer 中从 Windows 命令行运行 PHP

在 PHP 中从文本创建图像 - 如何制作多行?

如何在PHP中从当前日期添加月份[重复]

如何在 PHP 中从 Parse 中检索图像文件?

如何在 PHP 中从 Unicode 转换表情符号?

如何在 php 中从 localhost 发送电子邮件?