【问题标题】:PHP Code to generate random ID number for database [closed]PHP代码为数据库生成随机ID号[关闭]
【发布时间】:2013-04-24 05:43:08
【问题描述】:

这里是为那些精通 PHP 和 MYSQL 的人准备的。

我正在寻找一种方法来为数据库中的每个条目生成唯一但随机的长编号 ID。

我不希望它从通常的开始,

我想要更长的时间。有谁知道任何可以实现此目的的简单函数或代码 sn-p?

【问题讨论】:

标签: php mysql random user-defined-functions


【解决方案1】:

您可以更改表的 PRIMARY KEYAUTO_INCREMENT 种子,以获得更大的初始数字。

CREATE TABLE example (
  nid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50)
) AUTO_INCREMENT = 200000;

在表中插入行时为nid 生成的下一个值将是200001

要更改现有表的 AUTO_INCREMENT 种子,您可以使用:

ALTER TABLE example AUTO_INCREMENT = 200000;

【讨论】:

    【解决方案2】:

    使用函数 UUID();

    您可以阅读更多内容

    http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html

    mysql> SELECT UUID();
        -> '6ccd780c-baba-1026-9564-0040f4311e29'
    

    UUID 是一个 128 位数字,由 utf8 字符串表示,由五个十六进制数字组成,采用 aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 格式

    对于随机数使用 RAND()

    SELECT (FLOOR( 1 + RAND( ) *10000 ))
    

    【讨论】:

      【解决方案3】:

      这是独一无二的:

      $uniqueValue = uniqid('', true)
      

      【讨论】:

      【解决方案4】:

      使用 random.org 生成随机数

      在 php 中几乎不可能生成真正的随机数。在足够大的样本中,缺陷很明显,因为 PHP 使用伪随机数生成器来生成 rand() 等

      http://www.random.org/randomness/

      您可以使用 curl 生成和调用您的随机数。

      【讨论】:

        【解决方案5】:

        是在插入时,还是要更新现有表?

        假设您可以使用这样的插入。

        INSERT INTO someTable (aField, aNotherField, SomeNumber)
        SELECT 'aFieldValue', 'aNotherField', aNum
        FROM (SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
        UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum) Sub1
        LEFT JOIN someTable ON Sub1.aNum = someTable.SomeNumber
        WHERE someTable.SomeNumber IS NULL
        LIMIT 1
        

        这将生成 100000 到 999999 之间的 10 个随机数,并选择一个尚未使用的。

        这是一种非常讨厌的方法,并且有一个明显的主要缺陷,即生成的所有 10 个数字都可能已经被使用了。

        我倾向于建议可以避免使用随机数。

        【讨论】:

          猜你喜欢
          • 2013-05-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多