【问题标题】:Generating Random Numbers as primary key In PHP / Mysql在 PHP / Mysql 中生成随机数作为主键
【发布时间】:2011-10-06 16:24:02
【问题描述】:

在php中生成8位字母数字随机数的最佳方法是区分大小写的? 我想用这个唯一的数字存储在mysql数据库中,并使其成为主键。

【问题讨论】:

标签: php mysql random


【解决方案1】:

永远不要使用随机键作为主键。在大多数情况下,主键必须是唯一的,而随机数则不是。

例如

1 1 1 1 1 1 0 1 

也是 8 位随机数生成器的有效输出。

您应该使用自动增量字段或生成器来确保您的主键确实是唯一的。

如果您想拥有一个可能是唯一的标识符并且某种随机尝试使用 mysql 工具,例如:http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

一个警告可能是多次重复插入。

【讨论】:

  • 首先,为什么从来没有?其次,没有产生独特输出的随机生成器吗?
  • 随机数生成器的设计防止了输出的唯一性。
  • 是的,但是我们可以将它包装在另一个生成器中,该生成器会减少非唯一输出。或者对数据库进行尝试,直到它不存在(因此被接受为主键输入)。 OP 的措辞并不完美,但唯一的随机密钥并非闻所未闻。
  • @ypercube :可能是操作的意思,所以我编辑了我的帖子以添加有关 uuid 的更多信息。
【解决方案2】:

不是随机的,但如果您不希望您的 ID 是连续的,那么也许您可以以某种方式对其进行加密。请参阅以下关于同一主题的问题:Simple integer encryption

【讨论】:

    【解决方案3】:

    您或许可以使用uniqid 函数。

    但请确保您真的想这样做。 AUTOINCREMENT 列可能是更好的解决方案。

    【讨论】:

      【解决方案4】:

      我想您可以将项目中某个字段的哈希(md5() 或 sha1() 等)修剪为 8 个字符 - 尽管最终可能会发生冲突。

      为什么不将主键字段设为 AUTOINCREMENT?为什么必须是 8 个字母数字字符?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 2013-03-25
        相关资源
        最近更新 更多