多个插入的行ID

时间:2014-06-16 09:06:02

标签: mysql sql

我一次插入多行,如:

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(),但这会假定所有人都已成功插入。

另一种选择是一次只插入一行人,但我不知道这是否会影响性能?

1 个答案:

答案 0 :(得分:1)

使用单个语句插入值并将它们包装到事务中,例如:

START TRANSACTION;
INSERT INTO person  VALUES ('joe', 50);
INSERT INTO hobbies VALUES (LAST_INSERT_ID(),'golf');
COMMIT;

您可能会受到轻微的性能影响,但这应该会给您一致的结果。增加LAST_INSERT_ID()返回的值并不安全,因为可能存在修改AUTO INCREMENT值的并发插入。