如何在插入数据之前从数据库获取最后一个插入的 ID?

3
如何从数据库表中选择最后一个插入的 ID
我需要从数据库中获取最后一个插入的 ID。我尝试了 `last_insert_id()` 函数,但是这对我来说不起作用,因为我想在执行插入查询之前获取这个 ID,并且当我获得这个 ID 后,我会执行插入查询。我尝试使用 `max` 函数来获取 ID,但是如果我有一个已删除的 ID,它将无法获取到。例如,如果我有 ID 10 已被删除,那么最大 ID 将是 9,但是自动增量将是 11。所以我想获得下一个将要添加的自动增量 ID。例如,我有一个 ID 10 已被删除,我想取下一个 ID,也就是 11。

这是为了填补ID序列之间的空缺吗?如果是,那就别费心了。 - Jonnix
为什么last_insert_id()对您无效? - Sanzeeb Aryal
请确保使用事务。否则,即使您设法获得了now_insert_id,它也会搞砸一切。 - mroman
3个回答

5

您可以使用以下代码查询数据库中某个表的最后一个自增ID:

    SELECT AUTO_INCREMENT
    FROM  INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'database_name'
    AND   TABLE_NAME   = 'table_name';

什么是 information_schema.tables?table_schema 是什么? - mohamad mohamad
INFORMATION_SCHEMA是MySQL默认带的一个数据库。您可以查看MySQL文档,链接为http://dev.mysql.com/doc/refman/5.7/en/information-schema.html ,在那里您会找到所需的信息。为什么不执行它呢,而不是设置成-1呢? - ahammar

1
自动增量值是由数据库自动生成的,在插入操作完成后生成;这意味着在执行实际的插入查询之前无法获取它。 插入一些半空数据 获取已生成的自动增量值 使用该自动增量值进行计算 更新行以放置新/完整数据--在更新查询的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

或者您可以按照在MYSQL之前使用自增值进行插入触发器的使用方法?进行操作。


“这意味着在执行实际的插入查询之前,您无法获得它”是不正确的。请参考ahammar的答案。 - Fipsi

0

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

而且没有任何理由这样做。只需插入数据,获取实际ID,并在其他地方使用它。就这么简单。


总是可以做到那个。 - Your Common Sense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接