【发布时间】:2010-12-13 08:26:52
【问题描述】:
是否可以从插入多行的查询中获取自动递增的 ID? 例如:
INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);
或者,有没有办法在不向表中插入任何内容的情况下找到 NEXT 自动增量值?
谢谢
【问题讨论】:
是否可以从插入多行的查询中获取自动递增的 ID? 例如:
INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);
或者,有没有办法在不向表中插入任何内容的情况下找到 NEXT 自动增量值?
谢谢
【问题讨论】:
据我所知,auto_increment 不能填补 id 之间的空白,并且操作是原子的。所以你可以假设它们会排成一排。
【讨论】:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
如果您使用单个
INSERT语句插入多行,LAST_INSERT_ID()仅返回为第一个插入行生成的值。
所以不,您无法轻松获得所有 id,但您可以假设它们是连续的。不过,您应该永远不要依赖假设。听起来您想猜测在批量插入之后会出现的下一个 id?如果是这样,甚至不要尝试这样做,而是想另一种方法来做你想做的任何事情。 :)
【讨论】:
要获取下一个 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。当他们同时提交问题时会发生什么? last_insert_id() 是来自 A 还是 B?
解决此问题的一种方法是使用“预定义”id 或guid 来补充或代替自动递增的 id。
【讨论】: