php mysql_insert_id 在多行上?
Posted
技术标签:
【中文标题】php mysql_insert_id 在多行上?【英文标题】:php mysql_insert_id on multiple rows? 【发布时间】:2010-12-13 08:26:52 【问题描述】:是否可以从插入多行的查询中获取自动递增的 ID? 例如:
INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);
或者,有没有办法在不向表中插入任何内容的情况下找到 NEXT 自动增量值?
谢谢
【问题讨论】:
【参考方案1】:据我所知,auto_increment 不能填补 id 之间的空白,并且操作是原子的。所以你可以假设它们会排成一排。
【讨论】:
mysql 支持自动增量偏移(这在复制中更常见),因此连续 id 并不是所有环境中的保证。 你可以安全地假设 MySql 中following circumstances 下的连续 id:你正在使用 InnoDB,innodb_autoinc_lock_mode 设置为 0 或 1(默认)。【参考方案2】:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
如果您使用单个
INSERT
语句插入多行,LAST_INSERT_ID()
仅返回为第一个插入行生成的值。
所以不,您无法轻松获得所有 id,但您可以假设它们是连续的。不过,您应该永远不要依赖假设。听起来您想猜测在批量插入之后会出现的下一个 id
?如果是这样,甚至不要尝试这样做,而是想另一种方法来做你想做的任何事情。 :)
【讨论】:
【参考方案3】:要获取下一个 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。
【讨论】:
以上是关于php mysql_insert_id 在多行上?的主要内容,如果未能解决你的问题,请参考以下文章
mysql : 使用任何命令代替 mysql_insert_id();在 PHP 中?