【问题标题】:how to get from database the last inset id before insert如何在插入之前从数据库中获取最后一个插入ID
【发布时间】:2023-03-14 09:45:01
【问题描述】:

如何从数据库表中选择最后一个插入id

我需要从数据库中获取最后一个插入 id

我尝试了last_insert_id() 函数,但这对我不起作用,因为我想在执行插入查询之前获取此 ID,而当我获取此 ID 时,我会执行插入查询

我尝试使用max 作为 id 但这有一个问题,如果我有一个已删除 id不会被拍

例如,如果我删除了 id 10,则最大 id 将为 9,但自动 增量为 11

比我想拥有自动增量添加的新 id

示例:我有一个 id 10 被删除,我想使用下一个 id 它将是 11

【问题讨论】:

  • 这是填补ID序列之间的空白吗?如果是这样,请不要打扰。
  • 为什么 last_insert_id() 不适合你?
  • 确保使用事务。否则,即使您设法以某种方式获得 now_insert_id,它也会把事情搞砸。

标签: php mysql mysqli


【解决方案1】:

你可以:

选择AUTO_INCREMENT 来自 INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name'; 并得到你的最后一个身份证。

【讨论】:

  • 什么是 information_schema.tables 什么是 table_schema ?
  • INFORMATION_SCHEMA是mysql自带的数据库check mysql doc,你会找到你想要的信息,为什么不执行它而不是设置一个-1
【解决方案2】:

插入完成后,自动增量值由数据库自己生成;这意味着在执行实际插入查询之前您无法获得它。 插入一些半空数据 获取已生成的自增值 使用该自动增量值进行计算 更新行以将新/完整数据放置到位 - 使用更新查询的 where 子句中先前生成的自动增量来识别正在更新的行。

As pseudo-code :
begin transaction
insert into your table (half empty values);
$id = get last autoincrement id
do calculations
update set data = full data where id = $id
commit transaction

或者你可以关注Using Auto-Increment value in MYSQL Before Insert Trigger?

【讨论】:

  • which means you cannot get it before doing the actual insert query 不正确。请参阅 ahammar 的答案...
【解决方案3】:

您不能也不应该在插入之前获取最后插入的 id。

而且没有一个理由这样做。只需插入您的数据,获取实际 ID,然后在其他任何地方使用它。就如此容易。

【讨论】:

  • 总是可以做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2011-06-01
  • 1970-01-01
  • 2011-05-07
  • 2023-03-16
相关资源
最近更新 更多