有没有SQL可以获取MySQL数据库表中没有列出的第一个数字?例如:
表:用户
ID | Name | Number
------------------------
1 | John | 1456
2 | Phil | 345
3 | Jenny | 345612在这种情况下,SQL必须返回行数为1到344、346到1455和1457到345611的行列表
有什么建议吗?也许还需要一些程序?
发布于 2012-11-21 06:33:39
我喜欢@pst的答案,但我会推荐另一个替代方案。
这些未分配数字的生成可以使用@pst建议的随机方法,但使用这种方法可以将生成未分配数字列表需要多长时间的不确定性转移到批处理任务中,而不是在用户等待时在前端执行。如果数字空间的使用很稀疏,这可能不是问题,但随着更多的数字空间被使用,这将成为一个更大的问题。
发布于 2012-11-21 06:28:53
考虑到这些注释,我的第一个方法是使用“随机数”探测器。此方法假设:
Number已编入索引;的用户数“明显少于”可用用户数
方法:
Number IN (ns..)的N (即1-10)个数字,或Number = n的Number = n;然后,如果找不到请求的记录,则可以检测到在这种情况下,N=1的大小可能是“可以”的,而且它的实现是最简单的,尽管它至少需要6个数据库请求才能找到6个空闲的数字。较大的N会减少访问数据库的次数。
确保使用事务。
发布于 2012-11-21 06:32:18
只需使用自动增量列即可。数据库将自动分配下一个号码。您甚至不需要知道在插入时它是什么。只需告诉用户他得到的号码,不要给他任何选择。
https://stackoverflow.com/questions/13483176
复制相似问题