【问题标题】:get ids of multiple inserted rows获取多个插入行的 id
【发布时间】:2020-07-15 13:47:35
【问题描述】:

我需要通过单个查询获取插入的新 ID 列表(这些是自动增量的,我正在制作一个

INSERT INTO xtable(value1,value2,value3,value4) VALUES
(val1,val2,val3,val4),
(val1,val2,val3,val4),
(val1,val2,val3,val4),
(val1,val2,val3,val4), 
(val1,val2,val3,val4)

因此,正如您在插入 5 行的单个查询中看到的那样,我怎样才能获得这些 ID?我不想在插入查询后进行选择以获取最新的 IDS 或范围,因为如果它变慢并且另一个功能也会进行插入查询,它可能会出错,有任何方法可以在同一个查询 INSERT 中返回插入的 ID行?谢谢!

【问题讨论】:

  • ' 有任何方法可以在同一个查询 INSERT 中返回插入行的 ID' - 不,没有。考虑添加一列来捕获插入的日期(或批次)并对其进行查询

标签: mysql


【解决方案1】:

MySQL 文档页面:https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html 说:

对于多行插入,LAST_INSERT_ID() 和 mysql_insert_id() 实际上从插入的第一行返回 AUTO_INCREMENT 键。这使得多行插入能够在复制设置中的其他服务器上正确复制。

那么,如果您有第一个的 ID - 我希望按顺序为每条记录分配下一个更大的值,因为多行插入将在单个原子事务中完成。因此,如果您知道第一个 ID,您只需递增 id 以依次获取分配给每一行的值。例如,如果您有 4 行并且第一行的 ID 为 45,那么其余的将被分配 46、47、48。

您可能还想参考此文档页面,该页面描述了更多内容并提供了有关如何使用 LAST_INSERT_ID() 的示例。 https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2012-01-23
    • 1970-01-01
    • 2019-11-21
    • 2011-11-22
    • 1970-01-01
    • 2014-08-06
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多