1

所以有很多关于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 语句的上下文中运行。反正我测试过了。

在此处输入图像描述

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

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

给我: 在此处输入图像描述

任何帮助将不胜感激。

4

1 回答 1

0

好吧,事实证明 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 个不同的主键,但它工作得非常好。可能有更好的方法,但这是可以理解和可重复的。

祝你好运!

于 2014-11-14T09:34:49.517 回答