热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样生成数据库中不重复的固定位数的数字?

随机生成固定的位数(比如8位)的数字,作为用户注册的uid存入数据库,每个uid不重复,但可以是12345678,12345677。有种方法是随机生成8位数字,然后查询数据库有无此数据,有则重新生成在查询,无则写入...
随机生成固定的位数(比如8位)的数字,

作为用户注册的uid存入数据库,

每个uid不重复,

但可以是12345678,12345677。

有种方法是随机生成8位数字,

然后查询数据库有无此数据,

有则重新生成在查询,

无则写入数据库,

这样的方式比较费时。

有没有更好的方法,

比如结合别的随机值、时间戳之类的。

求解题思路或者方法,可用php实现

回复内容:

随机生成固定的位数(比如8位)的数字,

作为用户注册的uid存入数据库,

每个uid不重复,

但可以是12345678,12345677。

有种方法是随机生成8位数字,

然后查询数据库有无此数据,

有则重新生成在查询,

无则写入数据库,

这样的方式比较费时。

有没有更好的方法,

比如结合别的随机值、时间戳之类的。

求解题思路或者方法,可用php实现

通常数据库中存储的就是时间戳,也就是当前系统时间的毫秒数,然后除以1000,获取当前时间的秒数做为uid即可,因为如要存储的是毫秒的话,它占用数据库太长,用秒数即可保证唯一不重复。如果想让生成uid不只是数字还要有字母的话,可以将秒数转成16进制即可。

用户注册的uid,在某个范围自增就可以吧。
假设用户注册的qps没有那么高,可以利用update+私有复杂数据的方法在mongodb模拟一个锁,锁保护“上次注册的用户的uid”数据,每次拿锁,加一,注册,将锁保护的uid+1,释放锁即可。

唯一,非顺序:md5(uniqid());
顺序唯一:自增

使用时间戳,重复的几率几乎没有。

//生成0到1的随机小数
public  function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}

为什么怎么搞?不用主键自增?

uid最好还是用主键自增吧,然后php这边用mysql_insert_id()之类的函数取。这样查询操作也比较少。

创建一个自增列,起始值从10000000开始就行了。

很高兴为LZ解答这个问题。

首先,有什么东西是不停递增,并且不会重复的?

时间。

正如LZ猜想的那样,使用时间截转化成数字,可以产生始终递增并且不会重复的数字。

并且,这些数字还可以根据时间的推移,看大小就知道注册先后和注册时间。

这里仅仅是抛砖引玉。

$now=date("Y-m-d H:i:s");//按照 年月日,时分秒的格式,记录当前时间。
$unix_stamp=strtotime($now);
echo $unix_stamp;
/*strtotime函数预期一个包含美国英语日期格式的字符串,并尝试将其
解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)
这里LZ大概会得到一个10位的数字。*/

LZ可以把$unix_stamp作为随机uid,如果认为秒数产生的数值不够随机的话

(比如1秒内有多人同时注册),可以在$unix_stamp后加上microtime()函数转换成数字

来使得这个数字更加随机,以避免uid重复的问题。

推荐阅读
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • Intellij IDEA中详细图解连接MySQL腾讯云数据库以及基础操作
    虽然小编记录的是在IDEA中连接mysql腾讯云数据库。当然,如果读者使用的是本地数据库,也是一样的操作,只是数据库的url书写有所不同。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • MongoDB学习:(二)MongoDB简单使用
    MongoDB学习:(二)MongoDB简单使用MongoDB使用:执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面>mongo提示 ... [详细]
  •     系统采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默认是做了JSP未做前后端分离,由于业务需要已经多终端使用的需求(H5、小程序等) ... [详细]
author-avatar
王家刚163034
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有