php - 从多个插入查询中恢复生成的 ID

标签 php sql mysql stored-procedures

我想执行以下形式的查询:

INSERT INTO table(field1, field2) SELECT field1, field2 FROM table WHERE id IN ( 4, 8, 15, 16, 23, 42 )

其中 id 是 table 的 auto_increment'ing 主键。

执行这条语句后,我想知道刚刚生成的所有新 id 是什么。我怎样才能恢复这些信息?我有兴趣(也许)在存储过程中执行此操作并将新生成的 id 的列表返回到我的应用程序代码(比方说 PHP),我希望该列表与 IN 子句中出现的顺序相关SELECT 子查询。我认为这会在我的应用程序代码中节省大量顺序插入。这是可以实现的吗?

最佳答案

如果您可以控制该表(或可以创建另一个表)如何存储“transaction_id?”

如果你把它添加到你的表中,你可以这样做:

Declare @tranId int
Select @tranId = Max(transaction_id) + 1 from [table]
Insert Into [table] (field1, field2, transactionId)
Select field1, field2, @tranId
From //the rest of your query

然后您将提取新的 ID:

Select Id from [table] where transaction_id = @tranId

请注意,您要么需要立即运行该查询作为存储过程的一部分,要么需要将您使用的 transactionId 存储在某处,以便您可以提取正确的行而不必担心多个并发插入。

关于php - 从多个插入查询中恢复生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367152/

相关文章:

php - 无法在主目录中创建文件

php - 更新 MYSQL 表时 While 循环中的性能下降

javascript - 如何使用 jSignature.js 在一个页面中显示多个签名?

mysql函数语法未指定查询

php - MySQL如何正确处理包含代码/跨站点脚本的行?

php - 无法使用 Cron 作业连接到 MySQL 数据库

sql - 生成日期列之间的日期

用于选择并返回值的 SQL Server CTE

mysql - 关联子查询mysql

MySQL 总计行和列