是否可以从插入多行的查询中获取自动递增的ID? 例如:
INSERT INTO表(col1,col2)VALUES(1,2),(3,4),(5,6);
另外,有没有办法找到NEXT自动增量值而不在表中插入任何内容?
由于
答案 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的补充或替代。