php - 检索多行的最后插入的 ID

标签 php sql mysql

当向具有自动递增 PK 的表中插入数据时,我需要获取该键以便在另一条语句中使用。正如 SO 上显示的许多问题一样,这可以使用 mysql_insert_id() 在 PHP 中完成。

但是,我一直将我的插入分组在一起,所以我一次插入多行。我这样做是因为我猜可能会有一些性能问题,如果我错了请告知。无论如何,据我所知,当我需要所有插入行的 ID 时,mysql_insert_id() 只返回最后一个 ID。

我想在这种情况下我可以:

  1. 使用 mysql_insert_id() 和我输入的行数做一些简单的数学运算来计算所有 ID。但这能保证始终正确吗?

  2. 使用多个插入语句,每行一个

  3. 之前生成我的 ID,不使用自动递增。

我确信这一定是一个经典问题,所以我想知道最常见和最可取的方法是什么。

最佳答案

调用 last_insert_id() 可为您提供最后一批中插入的第一行的 ID。所有其他插入的,保证是连续的。

除非您正在做一些非常奇怪的事情,否则这可以让您足够轻松地计算每一行的 ID。

实际上,行为在 5.1 中有所不同,具体取决于 innodb auto increment mode 参数的设置;这应该无关紧要。只要您不更改默认设置,您就会看到预期的行为。

在某些情况下,这不会按照您的预期进行并且没有用 - 例如,如果您执行 ON DUPLICATE KEY UPDATE 或 INSERT IGNORE。在这些情况下,您需要执行其他操作来计算每行的 ID。

但是对于普通的 INSERT 批处理,没有为 auto-inc 列指定值,这很容易。

如何完整描述 auto-increments are handled in innodb is here

关于php - 检索多行的最后插入的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285231/

相关文章:

php - 上传的文件在数据库中显示为数组,并且用户 ID 未保存

mysql - 使用 sourcemod 时无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

php - 如何在数据库查询中使用数据透视表输出结果?拉维

php - Yii2 REST API 作为模块路由配置

php - 获取所有选中复选框的值并将它们插入数据库 - PHP

sql - GRANT 语句中的通配符?

sql - 如何有效地订购预先加载的记录?

php - html php 电子邮件中的换行符

mysql - 如何按文本的第一个字母分组

mysql - 从 MYSQL 将数据输入到 Google 柱形图中的 2 个以上的列。