【问题标题】:MySQL query next sequence number for MYSQL auto-incremented fieldMySQL 查询 MYSQL 自动递增字段的下一个序列号
【发布时间】:2013-11-28 08:32:10
【问题描述】:

在 MySQL 中,是否可以按顺序查询下一个数字以获得自增字段?

对于名为 projects 的表,表的主键 project_id 是一个自动递增字段。在插入新行之前,我想知道 project_id 将分配的数字。

如何查询?

【问题讨论】:

标签: mysql


【解决方案1】:

Rid 是正确的。此问题似乎与Finding the next available id in MySQL 重复

在该线程中,用户 Eimantas 提供了我使用的工作解决方案。为方便起见,在此转载:

SELECT Auto_increment FROM information_schema.tables WHERE table_name='the_table_you_want';

感谢 eggyal 和 GavinTowey 在此线程中的指导。

建议未来的读者注意 Gavin 关于竞争条件的评论(对 egyal 的回答)(即:另一个 DB 条目发生在您之前的瞬间,并“窃取”了您认为会获得的 ID)。

强烈建议使用 eggyal 描述的 LAST_INSERT_ID() ,而不是本答案中描述的方法。

我鼓励未来的读者支持 eggyal 的答案,因为这是一种更好的方法,但我希望不要再对这个答案投反对票。由于这是具体提出的问题,因此这是“正确” 的答案——尽管eggyals 不赞成。我相信没有难过的感觉;如您所知,选择我自己的答案作为正确答案对我没有任何好处。

【讨论】:

  • 虽然这个答案被否决了,但我现在已经多次使用这种方法了。并非每个网络开发人员都在构建 CNN.com。我们中的一些人构建了很少有并发用户的站点......即使在几个小时内,数据库条目也永远不会发生。在如此低流量的网站上,上述方法非常有用。反对者的痘痘:"Poo to you with knobs on"
  • 即使您只有一个用户,通常也很难阻止他们(意外)多次提交表单 - 可能是快速连续提交 - 这种方法也可能导致错误行为.考虑到以“正确”的方式做事是多么容易,并且尽可能地应用最佳实践有多大意义(如果没有别的,为了个人纪律,以便在真正需要的时候它变得自动),我看不出以容易出错的方式执行此操作的任何理由。 -1
【解决方案2】:

反过来做:先插入新记录,然后使用LAST_INSERT_ID()找出它的值。

【讨论】:

  • 谢谢,这是一个有用的命令。但是,我真的很想提前知道是否有可能。
  • @gibberish:为什么?您的要求表明设计不佳。见What is the XY problem?
  • @gebberish。您不可能确定下一个值是什么。假设您进行查询以找出下一个最高值是多少;然后另一个用户插入一行,现在你的答案不正确。这是一个“竞争条件”。还有像 auto_increment_offest 和 auto_increment_increment 这样的服务器选项。生成的数字并不总是连续的。因此,您需要在知道生成的数字之前实际执行插入操作。
  • 大家好,我理解您的担忧。我将在仅由系统管理员运行的例程中使用它。由于只有一个用户可以运行它,因此不存在被取代的风险。我需要这个值用于递归目录命名例程,并且事先知道它可以简化流程。但感谢您支持我的设计。
  • 不是一个完美的答案。有一些代码(尤其是从 Oracle 迁移到 MySQL 时)会获得下一个序列号。首先,做一些事情,然后再插入。所以我认为这个问题很实际,但这个答案是不切实际的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多