我想知道是否有人知道为表的主键创建唯一的随机整数id的好方法。我使用的是MySQL。值必须是整数。
发布于 2010-11-19 22:19:31
如果您愿意接受建议,并且可以实现它,那么可以使用UUID。MySQL的UUID()函数将返回一个可用于ID的36个字符的值。
但是,如果您想使用integer,我认为您需要创建一个将在INSERT语句中使用的函数getRandID()。此函数需要对现有is进行随机+检查,以返回以前未使用过的is。
检查MySQL的RAND()函数。
发布于 2010-11-19 22:55:21
回应:“因为我想用这个值编码成Base62,然后将它用于url中的id。如果我自动递增,用户可能很容易看到url id是如何生成的。”
如果安全性是你的目标,那么使用Base62,即使是“随机”生成的数字也不会有帮助。
更好的选择是:
对于特定的url,使用AUTO_INCREMENT
。
发布于 2011-08-05 18:44:04
如何生成unique_ids是一个有用的问题--但是您似乎对何时生成它们做了一个适得其反的假设!
我的观点是,您不需要在创建行时生成这些唯一的id,因为它们本质上独立于要插入的数据。
我所做的是预先生成唯一的id供将来使用,这样我就可以从容不迫,并绝对保证它们是唯一的,并且在插入时不需要进行任何处理。
例如,我有一个包含order_id的orders表。此id是在用户输入订单时动态生成的,永远递增1、2、3等。用户不需要看到这个内部id。
然后我有另一个表-带有(order_id,unique_id)的unique_ids。我有一个每晚运行的例程,该例程使用足够的unique_id行预加载此表,足以涵盖在接下来的24小时内可能插入的订单。(如果我在一天内收到10000个订单,我会有一个问题-但这将是一个很好的问题!)
这种方法保证了唯一性,并将所有处理负载从insert事务转移到批处理例程中,在批处理例程中不影响用户。
https://stackoverflow.com/questions/4225793
复制相似问题