是否可以从插入多行的查询中获取自动增量的id?例如:
INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);
或者,有没有一种方法可以找到下一个自动增量值,而不必向表中插入任何内容?
谢谢
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
如果您使用单个
INSERT
语句插入多行,则LAST_INSERT_ID()
仅返回第一行生成的值。
因此,不,您不能轻松地获取所有id,但是您可以假设它们是连续的。但是,您永远不应该依赖于假设。听起来您想猜测批量插入后下一个id
?如果是这样,请不要尝试这样做,并考虑其他方法来完成您想要做的事情。 :)
要获取下一个自增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。