我一次插入多行,如:
INSERT INTO person VALUES ('joe', 50), ('jon', 24);
然后我需要使用他们的id将上面的链接链接到另一个表。通常我会使用LAST_INSERT_ID()
INSERT INTO hobbies VALUES (LAST_INSERT_ID(), "golf");
但由于LAST_INSERT_ID()
插入多个值,因此无法恢复第一个插入行的ID。
我可以在每次插入爱好后增加LAST_INSERT_ID()
,但这会假定所有人都已成功插入。
另一种选择是一次只插入一行人,但我不知道这是否会影响性能?
答案 0 :(得分:1)
使用单个语句插入值并将它们包装到事务中,例如:
START TRANSACTION;
INSERT INTO person VALUES ('joe', 50);
INSERT INTO hobbies VALUES (LAST_INSERT_ID(),'golf');
COMMIT;
您可能会受到轻微的性能影响,但这应该会给您一致的结果。增加LAST_INSERT_ID()
返回的值并不安全,因为可能存在修改AUTO INCREMENT
值的并发插入。