【问题标题】:what is the best way to create random mysql ID using PHP使用 PHP 创建随机 mysql ID 的最佳方法是什么
【发布时间】:2010-02-18 11:25:48
【问题描述】:

我正在构建一个应用程序,该应用程序需要每个用户的随机唯一 id 而不是序列

mysql数据库

ID   Username

对于我的唯一随机 ID,最好的方法是什么?

【问题讨论】:

  • 为什么它必须是随机的唯一 id 而不是 auto-inc? auto-inc 更安全并确保唯一的编号。但是,如果您说将数据库拆分到两台机器上的两个数据库中,那么您可以在每台机器上拥有相同的 auto-inc。还要记住 1 2 3 4 5 6 本质上和 5 3 6 4 1 2 一样随机(如果不是人眼)

标签: php mysql random


【解决方案1】:

PHP 提供了一个 uniqid 函数,我想这可能会奏效。

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


另一个想法是生成/使用一些GUID - 在uniqid 手册页的用户注释中有一些建议。

【讨论】:

  • 如果我使用类似 $unique_id = unique();我应该检查这个 id 是否已经存在于数据库中?还是不?
  • 总是存在两次生成相同“唯一”ID 的风险(非常小,但存在)......所以你必须处理这种可能性;;;仍然,因为它极不可能,我会在数据库中使用唯一索引,尝试插入,并且只处理“由于重复条目而插入失败”问题 - 即在插入 之前我不会检查(但那是不是最干净的方式^^)
【解决方案2】:

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

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

【讨论】:

  • 如果我使用类似 $unique_id = unique();我应该检查这个 id 是否已经存在于数据库中?还是不?
  • 如果您不确定 $unique_id 是否真正独一无二,您应该这样做。
【解决方案3】:

MySQL 提供了一个名为 UUID() 的函数:

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

文档声称:

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

这应该可以满足您的需求。

【讨论】:

  • 对我来说,“预期”一词与“将”或“保证”并不完全相同。您必须记住,正确的术语是“伪随机数”,它与随机数不同,即真正随机的,并且可能不是随机的,可以在多次迭代后重复,从相同的种子等(阅读 Donald Knuth 在他的一本书中关于此的章节以获得真正的欣赏)。要获得唯一的随机数 me.to.you willo 需要从单一来源生成。然而,由于他没有告诉我们使用的上下文,这是一个猜测。
猜你喜欢
  • 1970-01-01
  • 2011-12-15
  • 2011-01-18
  • 2010-10-12
  • 2017-08-06
  • 1970-01-01
  • 2015-04-08
  • 2014-06-24
  • 1970-01-01
相关资源
最近更新 更多