如何在 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...SELECT
或LOAD DATA INFILE
,这尤其是一个问题,批量生成许多新的 id 值。
另见MySQL LAST_INSERT_ID() used with multiple records INSERT statement
【讨论】:
以上是关于如何在 PHP 中从 AUTO_INCREMENT 列中为每行检索生成的 PRIMARY KEY,并在 MySQL 中插入多行?的主要内容,如果未能解决你的问题,请参考以下文章