是否有可能只与MySQL的一个独特的6或9位数字分配给每个新行。举一个独特的6或9位数字,以每行
例子:
id1 : 928524
id2 : 124952
id3 : 485920
...
...
P.S:我能做到这与PHP的rand()
功能,但我希望有一个更好的办法。
是否有可能只与MySQL的一个独特的6或9位数字分配给每个新行。举一个独特的6或9位数字,以每行
例子:
id1 : 928524
id2 : 124952
id3 : 485920
...
...
P.S:我能做到这与PHP的rand()
功能,但我希望有一个更好的办法。
我建议你手动设置第一行的ID
到100000,然后告诉数据库自动递增。下一行应该是100001,然后是100002等等。每个独特的。
我不想要那样的东西。如果第一行有ID:100000,我不想让后面的行有ID:100001. – John 2012-02-16 17:49:10
那么,你能更精确地知道你想要什么吗? – jurgemaister 2012-02-16 17:51:46
我网站上的每个注册用户都可以创建如下网页:domain.com/928481,我希望网页具有随机ID,以便其他人无法访问他们,如果他们没有链接。 (有自动结合,问题在于下一行会=上一行+1,所以用户可以很容易地找到它们。) – John 2012-02-16 17:56:27
不知道为什么你真的愿意这样做,但你将不得不使用PHP的rand函数,看看它已经在数据库中,如果从开始重新开始,如果没有,那么用它来ID。
我之前做过,直到现在。我问了这个问题,看看是否有另一种方式来做到这一点。 – John 2012-02-16 17:50:09
基本上你想有保证不会对你的输入范围碰撞的加密哈希。似乎没有人知道MD5的碰撞行为,所以这里是一个的保证不会有任何的算法:选择两个大数M和N有没有共同的divisors--他们可以是两个非常大的素数,或2**64
和3**50
,或任何。您将生成0..M-1范围内的数字。使用下面的散列函数:
H(k) = k*N (mod M)
基本数论保证该序列具有范围0..M-1没有冲突。所以只要你的表中的ID小于M,你可以用这个函数对它们进行哈希处理,你就会得到明显的哈希值。如果使用无符号64位整数算术,则可以让M = 2**64
。然后N可以是任意的奇数(我会选择足够大的东西来确保k * N> M),并且可以免费获得模运算作为算术溢出!
我写评论下面,但我这里最好重复一遍:这不是实现访问保护的好方法。但是,如果M足够大,它确实可以防止人们嘲笑你的所有内容。
你可以使用自动增量列吗? – 2012-02-16 17:43:06
不,这不是我的情况。 – John 2012-02-16 17:43:53
'not rand()'的任何原因? – sgowd 2012-02-16 17:44:03