首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为表的主键创建唯一的随机整数ID?

问如何为表的主键创建唯一的随机整数ID?
EN

Stack Overflow用户
提问于 2010-11-19 22:13:28
回答 8查看 35.7K关注 0票数 12

我想知道是否有人知道为表的主键创建唯一的随机整数id的好方法。我使用的是MySQL。值必须是整数。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-11-19 22:19:31

如果您愿意接受建议,并且可以实现它,那么可以使用UUID。MySQL的UUID()函数将返回一个可用于ID的36个字符的值。

但是,如果您想使用integer,我认为您需要创建一个将在INSERT语句中使用的函数getRandID()。此函数需要对现有is进行随机+检查,以返回以前未使用过的is。

检查MySQL的RAND()函数。

票数 11
EN

Stack Overflow用户

发布于 2010-11-19 22:55:21

回应:“因为我想用这个值编码成Base62,然后将它用于url中的id。如果我自动递增,用户可能很容易看到url id是如何生成的。”

如果安全性是你的目标,那么使用Base62,即使是“随机”生成的数字也不会有帮助。

更好的选择是:

对于特定的url,使用AUTO_INCREMENT

  • Then +随机生成的字符串(隐藏在db中)为该url生成最终的“ id
  • ”

。

票数 15
EN

Stack Overflow用户

发布于 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事务转移到批处理例程中,在批处理例程中不影响用户。

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

https://stackoverflow.com/questions/4225793

复制
相关文章

相似问题

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