2010-02-18 26 views
1

我建设,需要一个随机唯一的ID为每个用户不是一个序列什么是使用PHP

mysql数据库

ID Username 

我唯一的随机应用程序创建随机mysql的ID的最佳方式ID,最好的方法是什么?

+0

为什么它必须是随机唯一的ID而不是auto-inc? auto-inc更安全并确保唯一的编号。但是如果你说在两台机器上的两个数据库上分割数据库,你可以在每个数据库上拥有相同的auto-inc。 还记得1 2 3 4 5 6基本上和5 3 6 4 1 2一样随机(如果不是人眼) – PurplePilot 2010-02-18 11:44:44

回答

2

PHP提供了一个uniqid函数,我想这可能会有诀窍。

注意它返回一个字符串,但不是一个整数。


另一个想法是生成/使用一些GUID - 有关于在uniqid手册页的用户注意事项提出了一些建议。

+0

如果我使用$ unique_id = unique();我应该检查这个ID是否已经存在于数据库中?或不 ? – trrrrrrm 2010-02-18 11:34:27

+0

总是有一个风险(非常小,但存在)同一个“唯一”ID会产生两次...所以你必须处理这种可能性;;;仍然,因为这是不太可能的,我会在数据库中使用UNIQUE索引,尝试插入,并只处理“插入失败,因为重复条目”的问题 - 即我插入*之前不检查(但这不是最简洁的方式^^)* – 2010-02-18 11:38:58

1

我仍然有正常的自动增量主键来正确识别每一行,这只是标准的约定。

然后,我会有另一个名为'user_id'的索引列或其他东西,并使用uniqid();

+0

如果我使用$ unique_id = unique();我应该检查这个ID是否已经存在于数据库中?或不 ? – trrrrrrm 2010-02-18 11:38:59

+0

如果你不确定'$ unique_id'是否真的是唯一的,你应该这样做。 – 2010-02-18 12:02:53

1

MySQL提供了函数调用UUID():

http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_uuid

文档声称此:

甲UUID被设计为一个数字,是 在空间和时间全局唯一的。两个 调用UUID()预计 生成两个不同的值,即使这些调用 是在两个 不是 互相连接的单独的计算机上执行。

这应该涵盖您的需求。

+0

对我而言,“预计”与“意志”或“保证”并不完全相同。你必须记住,正确的术语是“伪随机数”,它与随机数不一样,即真正随机的,并且可能不会是随机的,可以在多次迭代之后重复,从而产生相同的数字序列同样的种子等等。(在他的一本书中阅读Donald Knuth关于此的章节以获得真正的赞赏)。 要得到一个独特的随机数me.to.you willo需要从单一来源生成。但是,由于他没有告诉我们使用情况,这是一个猜测。 – PurplePilot 2010-02-18 12:29:00