【发布时间】:2011-11-27 07:31:45
【问题描述】:
我正在使用以下 perl 代码生成随机字母数字字符串(仅限大写字母和数字),以用作我的 MySQL 数据库中记录的唯一标识符。数据库可能保持在 1,000,000 行以下,但绝对现实的最大值约为 3,000,000。我有 2 条记录具有相同随机代码的危险机会,还是可能发生的次数很少?我对概率知之甚少(如果从这个问题的性质来看,这还不是很清楚的话),并且希望有人能提供意见。
perl -le 'print map { ("A".."Z", 0..9)[rand 36] } 1..6'
【问题讨论】:
-
为什么不能只使用自动增量字段?
-
如果由于某种原因自动增量不起作用,请考虑改用 UUID。这些被设计为具有最小碰撞机会的随机标识符。 metacpan.org/module/Data::UUID
-
如果您在数据库中创建唯一索引,当发生冲突时您会从 DBI 获得异常。您可以捕获异常,生成另一个代码,然后再次尝试插入。当然,当您使用许多可用代码时,这不会特别有效。
标签: mysql perl hash probability alphanumeric