【发布时间】: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