如何自动生成一个唯一的随机 6 位数字以插入到 mysql 表的列中?随机生成的数字必须不存在于列中。
我正在通过 php 访问 mysql。
表格格式是这样的,随机数在 reqnumber 列中:
id,status,reqnumber
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;
}
只需生成一个随机数,然后使用str_pad()
:
$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT);
您将遇到的问题是,由于您要求它是随机的,因此在生成之前无法知道它是否存在于表中。您必须进行循环并继续检查数据库。
对 reqnumber 字段设置唯一约束,并在 PHP 中放置错误处理代码
虽然随机也可以,但请注意,6 位数字仅提供 100 万种组合。我不确定在您开始出现重复的主键错误之前需要多长时间。
更好的解决方案是使用唯一值。这与随机值非常不同,因为唯一值保证每次都不同。MySql 有 auto_increment 数据类型来帮助你。不幸的是,当使用 6 位数字时,您仍然被限制为 100 万个条目。
如果你想要一个完全随机的长标识符,请查看MySql 的 UUID 函数。它将生成一个保证永远不会重复的唯一字符串。然而,它比 6 个字符长得多,因为这是实现唯一性所需要的。
表结构的一部分必须是:
`id` mediumint(6) AUTO_INCREMENT NOT NULL,
PRIMARY KEY (`id`)
如果您真的总是需要 6 位数字:
ALTER TABLE tbl AUTO_INCREMENT = 100000;
或使用
sprintf()