批量插入后检索ID的方法

4

我使用的是MySQL 5.5和PHP 5.4。我正在执行批量插入并需要捕获所有新插入的ID。这是我的代码:

$db->query("INSERT INTO commodity (analysis_id, commodity_description, a_units, 
a_average_yield, a_average_price) SELECT $analysis_id, commodity_description, 
a_units, a_average_yield, a_average_price FROM commodity WHERE analysis_id = 
$import_analysis_id");

有没有一种方法可以检索插入行的所有新ID?使用$db->insert_id只返回单个ID。如果必须,我会使用PHP循环并执行多个查询,但我不想这样做。谢谢!


不可能的(没有已知的解决方案,我知道)。你能否举个例子说明你需要这些ID做什么?也许我们可以找到另一种实现你目标的方法... - Ron
你的表中有任何日期时间字段吗?如果是的话,那么你可以编写一个简单的查询来获取特定时间戳之后插入的所有ID。 - metalfight - user868766
你需要的“ID”字段名是什么?我猜它不是analysis_id。可能是commodity_id或者只是id吗? - ghbarratt
2个回答

4

您可以通过首先选择表中最高的id来找到自动递增的id。插入后,高于该id的id是新的。

select max(id) from commodity 

6
考虑使用LOCK TABLES来防止其他会话向相同的表插入数据,从而使您的数据产生偏差。 - Marcus Adams
使用LOCK TABLES是一个非常好的想法。但这可能会减慢进程,因为一次只能有一个进程执行此操作。 - Ron
1
我认为Juergen是正确的。对于InnoDB,您可以使用事务(使用可重复读取),这将允许并发使用表格。 - Marcus Adams

0

我想我过于考虑了。由于我正在插入分析ID(例如,案件号码、客户号码等),我决定在此之后运行一个查询,以获取插入的分析ID的所有ID。这解决了我的问题。


酷。 analysis_id 被索引了吗? - Marcus Adams

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