php mysql_insert_id多行?

时间:2009-11-05 09:14:35

标签: php sql insert

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

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

另外,有没有办法找到NEXT自动增量值而不在表中插入任何内容?

由于

3 个答案:

答案 0 :(得分:4)

据我所知,auto_increment没有填补id之间的空白,操作是原子的。所以你可以假设它们会连续排列。

答案 1 :(得分:4)

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

  

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

所以不,你不能轻易获得所有的ID,但你可以假设他们是连续的。你应该从不依赖假设。听起来你想猜测批量插入后的下一个id?如果是这样,甚至不要尝试这种方式,并想出另一种方法去做你想做的事情。 :)

答案 2 :(得分:0)

要获取下一个auto_increment 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。当他们同时提交问题时会发生什么?是来自A或B人的last_insert_id()吗?

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