为每行提供唯一的6位或9位数字

时间:2012-02-16 17:42:03

标签: mysql

是否可以仅使用MySQL为每个新行分配一个唯一的6位或9位数字。

示例:

id1 : 928524
id2 : 124952
id3 : 485920
...
...

P.S:我可以用php的rand()函数做到这一点,但我想要一个更好的方法。

4 个答案:

答案 0 :(得分:0)

MySQL可以自己分配唯一的连续密钥。如果你不想使用rand(),也许这就是你的意思?

答案 1 :(得分:0)

我建议你手动将第一行的ID设置为100000,然后告诉数据库自动增加。然后下一行应为100001,然后是100002,依此类推。每个人都独一无二。

答案 2 :(得分:0)

不知道为什么你会想要这样做但你必须使用php的rand函数,看看它是否已经在数据库中,如果它是从头开始,如果它不是那么它用于标识。

答案 3 :(得分:0)

基本上,您需要一个加密哈希值,保证不会对您的输入范围产生冲突。似乎没有人知道MD5的碰撞行为,所以这里的算法保证没有任何:选择两个没有公约数的大数M和N--它们可以是两个非常大的素数,或2**643**50,或其他什么。您将生成0..M-1范围内的数字。使用以下散列函数:

H(k) = k*N (mod M)    

基本数理论保证序列在0..M-1范围内具有 no 冲突。因此,只要表中的ID小于M,您就可以使用此函数对它们进行哈希处理,并且您将拥有不同的哈希值。如果使用无符号64位整数运算,则可以M = 2**64。那么N可以是任何奇数(我选择足够大的东西以确保k * N> M),并且你可以免费获得模运算作为算术溢出!

我在评论中写了以下内容,但我最好在此重复一遍:这不是实施访问保护的好方法。但如果M足够大,它确实可以防止人们诋毁你的所有内容。