MySQL - 返回最后插入ID的组

时间:2014-07-16 11:19:33

标签: mysql sql database last-insert-id

关于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并将Data1,2和3中的值插入到对其具有主键约束的其他表中。

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

根据文档,last_insert_id()在单个INSERT语句的上下文中运行。无论如何我测试了它。

enter image description here

我也尝试将值写回表中,但当然SQL在集合上运行:

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

给我: enter image description here

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

嗯,事实证明MySQL使用起来很痛苦,但如果有人想在这里找到解决方案,那就是:

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

    declare last_insert_pk int;
    declare last_insert2_pk int;

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

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

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

祝你好运!

相关问题