我正在使用PHP和MySQL编写脚本,我希望得到一个唯一的id(由字符串组成:大写字母和带数字的小写字母),如:gHYtUUi5b
.我发现PHP中的许多函数可以生成这样的数字,但我担心如何确保id是唯一的!
更新:uuid很长,我的意思是这样的id:(P5Dc)一个11个字母数字字符.
CSh*_*Atl 55
我使用UUID()来创建一个唯一的值.
例:
insert into Companies (CompanyID, CompanyName) Values(UUID(), "TestUUID");
Run Code Online (Sandbox Code Playgroud)
RJS*_*ord 21
你可能喜欢我们这样做的方式.我想要一个看似"随机"的可逆唯一代码 - 一个相当常见的问题.
我们现在有一个号码在通话之间变化很大,保证不到10,000,000,000.这不是一个坏的开始.
选择基数34的原因是我们不担心0/O和1/1碰撞.现在,您有一个短随机密钥,可用于查找LONG数据库标识符.
drA*_*erT 14
一种编程方式可以是:
注意:
如果使用5.7.4以上版本的MySQL,可以使用新增的RANDOM_BYTES函数:
SELECT TO_BASE64(RANDOM_BYTES(16));
Run Code Online (Sandbox Code Playgroud)
这将产生一个随机字符串,例如GgwEvafNLWQ3+ockEST00A==
.
小智 6
如何生成unique_ids是一个有用的问题 - 但是你似乎在生成它们时会做出反效果的假设!
我的观点是,您在创建行时不需要生成这些唯一ID,因为它们基本上与所插入的数据无关.
我所做的是预先生成独特的id以供将来使用,这样我就可以享受自己的甜蜜时光并绝对保证它们是独一无二的,并且在插入时无需进行任何处理.
例如,我有一个order_id的订单表.当用户输入订单时,会立即生成此ID,永久递增1,2,3等.用户无需查看此内部标识.
然后我有另一个表 - unique_ids与(order_id,unique_id).我有一个每天晚上运行的例程,它会为此表预加载足够多的unique_id行,以覆盖可能在接下来的24小时内插入的订单.(如果我在一天内获得10000个订单,我就会遇到问题 - 但这将是一个很好的问题!)
这种方法保证了唯一性,并且可以将任何处理负载从插入事务转移到批处理例程中,而不会影响用户.