【问题标题】:Create unique random codes - PHP/MySQL创建唯一的随机代码 - PHP/MySQL
【发布时间】:2013-01-18 08:07:08
【问题描述】:

我必须为我的数据库中的每个“公司”创建唯一代码。

我认为这可能的唯一方法是使用rand() 创建一个随机数,然后检查数据库中是否存在该“公司”的数字,如果它确实重新创建。

我的问题是:有没有更好的方法来做到这一点 - 一种更有效的方法。好像我正在创建 10 000 个代码并且数据库中已经有 500 000 个代码,它会越来越慢。

有什么想法或提示可能是更好的方法吗?

编辑:

对不起,也许我可以解释得更好。这些代码不会同时生成,它们可以每天/每月/每年创建一次。

另外,我需要能够定义代码的字符,例如,字母数字或仅数字

【问题讨论】:

  • 请参考stackoverflow.com/questions/5612656/…希望对你有用
  • 必须是代码吗?你能在mysql中使用AUTO_INCREMENT吗?如果不是,您可以尝试一个具有足够多数字的随机数(即,它太大以至于需要很长时间才能解决系统速度变慢的问题)第三个是将随机数与随机挑选的字符结合起来为它提供更多的可能性和更少的机会来减慢系统速度。
  • 这不是独一无二的。另一个问题是关于仅生成随机数字。两个答案都大不相同。

标签: php unique


【解决方案1】:

我建议您使用“通用唯一标识符”:http://en.wikipedia.org/wiki/Universally_unique_identifier 为每个公司生成随机代码。通过这种方式,您可以避免检查数据库中的重复项:

任何人都可以创建一个 UUID 并使用它来识别具有 有理由相信相同的标识符永远不会 任何人无意中创建以识别其他事物。 因此,标有 UUID 的信息可以在以后组合成一个 单个数据库,无需解决标识符 (ID) 冲突。

在 PHP 中,您可以为此使用函数 uniqid:http://es1.php.net/manual/en/function.uniqid.php

【讨论】:

  • 使用 Uuid 是个好建议,但请记住 PHP 的函数 uniqid() 不会生成真正的 Uuid,而是基于微时间生成一个值,可能的空间要小得多(一个 Uuid有 128 位)。
  • 是的,我知道 uniqid() 不会生成真正的 UUID。还有其他几个实现,比如这个 PECL 包:pecl.php.net/package/uuid
【解决方案2】:

MySQL 的 UUID 函数应该会有所帮助。 http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

INSERT INTO table (col1,col2)VALUES(UUID(), "someValue")

【讨论】:

    【解决方案3】:

    如果代码只是整数,则使用自动增量或获取当前最大值并开始递增

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2011-08-19
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多