【问题标题】:Multiple Inserted Row Ids多个插入的行 ID
【发布时间】:2014-08-06 01:32:35
【问题描述】:

我一次插入多行,例如:

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

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

【问题讨论】:

  • 只需使用多个语句并分别插入每个人。只要它们在同一个事务中,性能应该是相似的。
  • LAST_INSERT_ID() 返回一条记录的插入 ID。不能用于多条记录插入!
  • 您可以使用触发器在表格的每个新条目上插入行

标签: mysql sql


【解决方案1】:

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

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

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

【讨论】:

  • 这并不理想,但您可以锁定表,然后您可以确定您可以获得一系列 auto_increment 值
猜你喜欢
  • 2020-07-15
  • 2012-07-04
  • 1970-01-01
  • 2011-08-21
  • 2019-11-21
  • 2013-05-08
  • 1970-01-01
  • 2011-11-22
  • 2014-09-23
相关资源
最近更新 更多