0

如何自动生成一个唯一的随机 6 位数字以插入到 mysql 表的列中?随机生成的数字必须不存在于列中。

我正在通过 php 访问 mysql。

表格格式是这样的,随机数在 reqnumber 列中:

id,status,reqnumber
4

5 回答 5

4
   function gen(){
    $num = rand(100000,999999);
    if($num == ifnumberinyourdatabase){
    gen();
    }
    return $num;
    }

您也可以在此处使用递归函数。哪个检查数字是否是您的数据库,如果不是,则生成新的数据库,如果不返回唯一的数字

function gen(){
        $num = rand(100000,999999);
$query_idgetrs = "SELECT * FROM servicetbl where reqnumber = $num";
$idgetrs = mysql_query($query_idgetrs, $dbconnection) or die(mysql_error());
$row = mysql_num_rows($idgetrs);

        if($row >= 1){
        gen();
        }
        return $num;
        }
于 2013-02-20T11:37:46.807 回答
1

只需生成一个随机数,然后使用str_pad()

$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT);

您将遇到的问题是,由于您要求它是随机的,因此在生成之前无法知道它是否存在于表中。您必须进行循环并继续检查数据库。

于 2013-02-20T11:34:19.020 回答
0

对 reqnumber 字段设置唯一约束,并在 PHP 中放置错误处理代码

于 2013-02-20T11:34:09.617 回答
0

虽然随机也可以,但请注意,6 位数字仅提供 100 万种组合。我不确定在您开始出现重复的主键错误之前需要多长时间。

更好的解决方案是使用唯一值。这与随机值非常不同,因为唯一值保证每次都不同。MySql 有 auto_increment 数据类型来帮助你。不幸的是,当使用 6 位数字时,您仍然被限制为 100 万个条目。

如果你想要一个完全随机的长标识符,请查看MySql 的 UUID 函数。它将生成一个保证永远不会重复的唯一字符串。然而,它比 6 个字符长得多,因为这是实现唯一性所需要的。

于 2013-02-20T11:37:16.760 回答
0

表结构的一部分必须是:

`id` mediumint(6) AUTO_INCREMENT NOT NULL,
PRIMARY KEY (`id`)

如果您真的总是需要 6 位数字:

ALTER TABLE tbl AUTO_INCREMENT = 100000;

或使用 sprintf()

于 2013-02-20T11:37:21.030 回答