【问题标题】:MySQL - Return group of last inserted ID'sMySQL - 返回最后插入的 ID 组
【发布时间】:2014-09-06 21:39:48
【问题描述】:

所以有很多关于LAST_INSERT_ID() 的问题和答案。如果您要插入单行并需要该 ID 的返回值来处理事情,这很好用,但如果您正在执行组插入并需要所有 AUTO_INCREMENT ID 的返回值怎么办?

拿这张桌子:

Name     |   Data1    |    Data2    |      Data3
---------------------------------------------------
Name 1   |   blah     |    Herp     |      Derp
Name 2   |   rwwe     |    asdf     |      3445
Name 3   |   asdf     |    asdf     |      8678
Name 1   |   guih     |    adsf     |      3565
Name 1   |   asfg     |    rwer     |      7877

我需要将Name 1 的值插入到表中,然后将primary key 中的值插入到其他具有主键约束的表中。

问题是“名称”不是唯一的,所以我无法查询原始/临时表并以这种方式获取值。

根据文档,last_insert_id() 在单个 INSERT 语句的上下文中运行。反正我测试过了。

我也尝试将值写回表中,但当然 SQL 对集合进行操作:

insert into test_fetch_id(lastname,Last_ID)
select RESOURCE_ID, last_insert_id() from resources r limit 100;

给我:

任何帮助将不胜感激。

【问题讨论】:

  • 如果您无法获得从最后插入的 id 到最后插入的减去受影响的行数的 id 范围,您可以在每次插入调用后获取最后一个插入并将其存储在MySQL。
  • 嗨 Shromz,它是一个插入语句。 (这就是问题)。除非我错过了什么?
  • AFAIK 这是不可能的。 last id 方法只能返回最后插入的单个 id。
  • 如果您的设置正确,只需获取last_insert_id 并知道您插入了多少行就足够了。否则,您可能需要一个额外的列来存储“组插入 ID”,以便您选择稍后插入的内容。

标签: mysql sql database last-insert-id


【解决方案1】:

好吧,事实证明 MySQL 是……使用起来很痛苦,但是如果有人想要这里的解决方案,那就是:

您需要创建一个游标,并将其值设置为 last_insert_id()。 例如:

    declare last_insert_pk int;
    declare last_insert2_pk int;

然后,在光标中,为该迭代设置最后插入的 pk(s):

    set last_insert_pk = last_insert_id();
    -- ...some stuff...
    set _insert2_pk = last_insert_id();

我不得不在一个巨大的关系表中使用 8 个不同的主键,但它的效果非常好。可能有更好的方法,但这是可以理解和可重复的。

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2012-01-15
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多