首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取MySQL数据库表中未列出的第一个可用号码

问获取MySQL数据库表中未列出的第一个可用号码
EN

Stack Overflow用户
提问于 2012-11-21 06:17:12
回答 5查看 826关注 0票数 4

有没有SQL可以获取MySQL数据库表中没有列出的第一个数字?例如:

表:用户

代码语言:javascript
复制
ID  | Name   | Number
------------------------
1   | John   | 1456
2   | Phil   | 345
3   | Jenny  | 345612

在这种情况下,SQL必须返回行数为1到344、346到1455和1457到345611的行列表

有什么建议吗?也许还需要一些程序?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-21 06:33:39

我喜欢@pst的答案,但我会推荐另一个替代方案。

  1. 创建一个包含未分配号码的新表,在其中插入几千行左右。
  2. 向用户显示其中的一些号码。
  3. 当使用某个号码时,请将其从未分配号码table.
  4. Periodically中删除,并根据需要生成更多未分配号码。

这些未分配数字的生成可以使用@pst建议的随机方法,但使用这种方法可以将生成未分配数字列表需要多长时间的不确定性转移到批处理任务中,而不是在用户等待时在前端执行。如果数字空间的使用很稀疏,这可能不是问题,但随着更多的数字空间被使用,这将成为一个更大的问题。

票数 1
EN

Stack Overflow用户

发布于 2012-11-21 06:28:53

考虑到这些注释,我的第一个方法是使用“随机数”探测器。此方法假设:

  1. Number已编入索引;

的用户数“明显少于”可用用户数

方法:

  1. 在client;
  2. Query数据库上随机选择Number IN (ns..)的N (即1-10)个数字,或Number = n的Number = n;然后,如果找不到请求的记录,则可以检测到
  3. (如果该数字可用)。

在这种情况下,N=1的大小可能是“可以”的,而且它的实现是最简单的,尽管它至少需要6个数据库请求才能找到6个空闲的数字。较大的N会减少访问数据库的次数。

确保使用事务。

票数 1
EN

Stack Overflow用户

发布于 2012-11-21 06:32:18

只需使用自动增量列即可。数据库将自动分配下一个号码。您甚至不需要知道在插入时它是什么。只需告诉用户他得到的号码,不要给他任何选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13483176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档