创建唯一的随机代码-PHP/MySQL
我必须为数据库中的每个“公司”创建唯一的代码 我认为这是可能的唯一方法是使用创建唯一的随机代码-PHP/MySQL,php,unique,Php,Unique,我必须为数据库中的每个“公司”创建唯一的代码 我认为这是可能的唯一方法是使用rand()创建一个随机数,然后检查数据库中该“公司”是否存在该数字,如果它确实存在 我的问题是:有没有更好的方法来做到这一点-一个更有效的方法。好像我正在创建10000个代码,而DB中已经有500000个代码,它将越来越慢 关于更好的方法有什么想法或建议吗 编辑: 对不起,也许我能解释得更清楚些。不会同时生成所有代码,可以在任何时候每天/每月/每年创建一次 此外,我需要能够定义代码的字符,例如,字母数字或仅数字我建议您
rand()
创建一个随机数,然后检查数据库中该“公司”是否存在该数字,如果它确实存在
我的问题是:有没有更好的方法来做到这一点-一个更有效的方法。好像我正在创建10000个代码,而DB中已经有500000个代码,它将越来越慢
关于更好的方法有什么想法或建议吗
编辑:
对不起,也许我能解释得更清楚些。不会同时生成所有代码,可以在任何时候每天/每月/每年创建一次
此外,我需要能够定义代码的字符,例如,字母数字或仅数字我建议您使用“通用唯一标识符”:为每个公司生成随机代码。通过这种方式,您可以避免检查数据库中的重复项:
任何人都可以创建UUID,并使用它来识别具有
对同一标识符永远不会出现的合理信心
由任何人无意中创建以识别其他内容。
因此,使用UUID标记的信息可以在以后合并到
无需解决标识符(ID)冲突的单个数据库
在PHP中,您可以使用函数uniqid来实现此目的:如果代码只是整数,则使用autoincrement或获取当前最大值并开始递增它MySQL的UUID函数应该会有所帮助
插入表(col1,col2)值(UUID(),“someValue”)
请参阅,希望如此。它必须是代码吗?你能在mysql中使用自动增量吗?如果没有,您可以尝试一个具有足够多数字的随机数(例如,某个数字太大,需要很长时间才能出现问题,从而减慢系统速度)第三种方法是将随机数与随机选取的字符相结合,以增加可能性,减少减慢系统速度的机会。这不是唯一的方法。另一个问题是只生成随机数。两种答案都非常不同。使用Uuid是一个很好的建议,但请记住PHP的函数uniqid()
不会生成真正的Uuid,而是基于微时间生成一个值,可能空间更小(Uuid有128位)。是的,我知道uniqid()不会生成真正的Uuid。还有其他几种实现,如此PECL包: