mysql生成不重复随机数(unique number generation)
转自:http://blog.csdn.net/dreamer2020/article/details/52049629
问题来源
业务中有时会遇到要生成不重复随机数的情况,例如,新生成一个商品编号、房间编号、或者其他物品编号等。不愿意采用表的自增索引 id,同时又希望新生成的编号是不重复的。
这就需要考验mysql的随机数功能了。
Solution
mysql的rand函数可以生成一个0到1之间的随机数,进行一定的放大即可得到一个随机数。再通过条件查询来限制新随机数没有在表中出现过。如下所示:
SELECT FLOOR(RAND() * 99999) AS random_num
FROM numbers
WHERE "random_num" NOT IN (SELECT my_number FROM numbers)
LIMIT 1
然而经过实测,该办法在表空时返回也为空。考虑到表空的情形,加一个集合,如下:
SELECT random_num
FROM (
SELECT FLOOR(RAND() * 99999) AS random_num
FROM numbers
UNION
SELECT FLOOR(RAND() * 99999) AS random_num
) AS ss
WHERE "random_num" NOT IN (SELECT my_number FROM numbers)
LIMIT 1
通过union字段在表空时,直接获取一个随机数返回。
延伸:mysql随机取记录
基本思路:随机排序。
select * from numbers order by rand() limit 1
这行命令就可以从表中随机选择一条记录。如何是随机选择多条,如下
select * from numbers order by rand() limit 10
据说,order by rand()的办法效率不好,本人也没有在记录多的表测过。在规模不大的前提下,用这个办法应该是最简单的。如果要考虑效率,请参考文末的链接。
附链接
How to Generate Random number without repeat in database using PHP?
mysql unique number generation
MySQL select 10 random rows from 600K rows fast
mysql生成不重复随机数(unique number generation)的更多相关文章
- C#生成不重复随机数列表
C#生成不重复(随机数 http://www.jbxue.com/tags/suijishu.html)列表实例的代码.例子: ; Random rnd = ; i < ...
- Mysql 生成不重复的随机数字
在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...
- PHP生成不重复随机数的方法
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下. 方法一: ...
- [转载]C# Random 生成不重复随机数
Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它 ...
- C# Random 生成不重复随机数
命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备. 伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,因为它们是用一种确定的数 ...
- mysql 生成指定范围随机数
生成随机数 生成0-3的随机数 SELECT RAND() * 3 最大不会超过3, SELECT FLOOR(RAND() * 3) 上面生成整数的值是0,1,2,3生成的随机整数是1,2,3的话, ...
- C#生成不重复随机数的方法
在使用Random类生成随机数时,我们可能会碰到生成随机数重复的问题. 比如我们要生成6位数字验证码,虽然也是使用Random,但是可能出现111111,999999这样的情况. 这是因为在实例化Ra ...
- Python根据上下限生成不重复随机数1
Python 2.7.5代码: #coding=utf-8 import random #定义计数器,默认为0 num=0 #定义随机结果集,默认为空列表 choose_resault=[] #最多可 ...
- JS生成不重复随机数
说明 我们可以用Math.random()的方法轻松的生成 一个随机的数字,但是这个数字可能是重复的.有时候,我们需要一个不重复的随机数,可以用很多的方法来实现这个要求,以下方法是效率最高的. 解释 ...
随机推荐
- TCP套接字端口复用SO_REUSEADDR
下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Add ...
- Win10年度更新开发必备:VS2015 Update 1正式版下载汇总
微软在12月1日发布了Visual Studio 2015 Update 1 .在MSDN中微软也提供下载,而且MSDN的Visual Studio 2015 Update 1与官方免费下载的文件是一 ...
- 使用Axure RP原型设计实践05,了解公式
本篇体验公式的使用,一般出现值的时候就可以使用公式,公式可以使用全局变量也可以使用局部变量,在Axure中使用公司有一定的语法. 先创建2个全局变量. 向页面中拖入Rectangle部件,给它的OnC ...
- Linux学习7-tomcat部署多个项目(多个端口)
前言 前面已经在tomcat上搭建了jenkins的环境,如果我们有多个项目需要部署的话,如何在一个tomcat下部署多个项目呢? 前面是直接在:8080/jenkins访问的,如果有其它项目部署的话 ...
- Spring+Velocity(平台升级至Spring Framework 5.0.2)
下载: http://repo.spring.io/release/org/springframework/spring/ Dear Spring community, I’m pleased to ...
- xheditor-文件上传-java-支持html5-application/octet-stream
package reyo.sdk.utils.file; import java.io.BufferedOutputStream; import java.io.File; import java.i ...
- TeXLive里面集成了CTeX,Lyx是一个编辑软件
TeXLive里面集成了CTeX,LaTeX是排版引擎,CTeX和TeXLive是发行版.LaTeX是毛坯房,CTeX和TeX Live是带精装的房子.CTeX 套装是一个个人作品,存在很多问题.这些 ...
- 彻底理解Java的feature模式
先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...
- LaTeX技巧22:LaTeX文档中的参考文献初级
用 LaTeX 处理文档, 经常就要书写参考文献, 本篇就是介绍如何在 LaTeX 中使用参考文献, 注意这里讲的是LaTeX默认的 thebibliography 环境, 如果要了解 LaTeX 中 ...
- HashMap 与 ConcurrentHashMap
1. HashMap 1) 并发问题 HashMap的并发问题源于多线程访问HashMap时, 如果存在修改Map的结构的操作(增删, 不包括修改), 则有可能会发生并发问题, 表现就是get()操作 ...