关于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;
给我:
非常感谢任何帮助。
答案 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个不同的主键,但它的效果非常好。可能有更好的方法,但这是可以理解和可重复的。
祝你好运!