【发布时间】:2013-02-24 04:25:24
【问题描述】:
我目前正在使用$mysqli->insert_id 在插入新行时从 MySQL 表中检索自动分配的主键。这适用于单个插入。这是一个简单的例子
$result = $mysqli->query($query);
$NewPrimaryKey = $mysqli->insert_id;
但是,我(实际上是从这个网站)了解到,使用扩展插入更好地完成多个插入:
insert into table (name1,name2,name3) values
('blah1','blah2',blah3'),
('blah1','blah2',blah3'),
('blah1','blah2',blah3'))
这也很有效——除非我想知道哪些键是自动分配的。
PHP 手册说:
在具有 AUTO_INCREMENT 字段的表上运行扩展插入时, mysqli_insert_id() 的值将等于 first 的值 已插入行。
我的测试似乎证实了这一点。
注意:我不想要第一个或最后一个。
我不想为了获得单独的 auto_allocated 键而不得不恢复到数千个单次插入。
有没有人知道如何进行扩展插入并取回所有分配的键(大概在一个数组中)?
我确实想到在进行扩展写入之前只读取并保留最新的现有密钥,然后计算分配的密钥的预期值,但这似乎有点夸张。
【问题讨论】:
-
你考虑过 ORM 吗?
-
您确定需要批量插入吗?如果这是您在应用程序中需要所有 ID 的场景,则使用批处理插入的性能优势可能可以忽略不计(因为我假设您需要这些 ID 来发出后续查询为每个项目插入相关数据)?
-
我没有听说过 ORM。我快速浏览了一下,但这似乎是一套需要学习的新技能。我真的不想为这个单一的问题这样做,但是谢谢。
-
我发现批量插入对性能有很大影响。我保持脚本的计时,在这种情况下,使用单次插入和批量插入之间的运行时间差异为 1.2 秒与 0.2 秒。 (不科学的)x6 差异。这在一次处理数千条记录时很重要。