多行插入时如何获取PHP的mysql_insert_id?

7

是否可以从插入多行的查询中获取自动增量的id?例如:

INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);

或者,有没有一种方法可以找到下一个自动增量值,而不必向表中插入任何内容?

谢谢

3个回答

4
据我所知,auto_increment不会填补id之间的空隙,同时这个操作是原子性的。因此,你可以假设它们是连续的。

1
MySql支持自动增量偏移(这在复制中更常见),因此连续的ID在所有环境中都不能保证。 - webbiedave
在MySQL中,您可以安全地假定在以下情况下连续的ID:您正在使用InnoDB,innodb_autoinc_lock_mode设置为0或1(默认值)。 - Joe G

4

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

如果您使用单个INSERT语句插入多行,则LAST_INSERT_ID()仅返回第一行生成的值。

因此,不,您不能轻松地获取所有id,但是您可以假设它们是连续的。但是,您永远不应该依赖于假设。听起来您想猜测批量插入后下一个id?如果是这样,请不要尝试这样做,并考虑其他方法来完成您想要做的事情。 :)


0

要获取下一个自增ID,您可以使用以下代码:

SELECT auto_increment FROM information_schema.tables WHERE table_name = 'table-you-want-to-check';

然而,在您的代码逻辑中,您可能不想依赖于auto_increment id或last_insert_id()。例如,假设两个人A和B几乎在同一时刻向您的数据库添加问题,并且您正在使用last_insert_id()来确定该人问题的id。当他们同时提交问题时会发生什么?last_insert_id()是来自A还是B?

克服此问题的一种方法是使用“预定义”的id或guid,以补充或替代自动增量id。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接