mysql生成不重复随机数(unique number generation)
2017-09-25 20:06
435 查看
转自:http://blog.csdn.net/dreamer2020/article/details/52049629
这就需要考验mysql的随机数功能了。
然而经过实测,该办法在表空时返回也为空。考虑到表空的情形,加一个集合,如下:
通过union字段在表空时,直接获取一个随机数返回。
这行命令就可以从表中随机选择一条记录。如何是随机选择多条,如下
据说,order by rand()的办法效率不好,本人也没有在记录多的表测过。在规模不大的前提下,用这个办法应该是最简单的。如果要考虑效率,请参考文末的链接。
mysql unique number generation
MySQL select 10 random rows from 600K rows fast
问题来源
业务中有时会遇到要生成不重复随机数的情况,例如,新生成一个商品编号、房间编号、或者其他物品编号等。不愿意采用表的自增索引 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)
- 用MySQL里的Rand()生成 不连续重复 的随机数年龄以及随机姓名字符串
- 用MySQL里的Rand()生成 不连续重复 的随机数年龄以及随机姓名字符串
- 巧用 ROW_NUMBER() 生成不重复的唯一排序码,按客户的需要任意排序数据
- 生成不重复的随机数序列
- 生成不重复的随机数
- 生成不重复的随机数
- 牛刀小试(02)——生成不重复的随机数
- PHP生成不重复随机数的方法汇总
- C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- 巧用 ROW_NUMBER() 生成不重复的唯一排序码,按客户的需要任意排序数据
- 一起谈.NET技术,生成不重复的随机数的二种方法
- MySQL中unique列上插入重复值解决办法
- java 无重复生成一个范围内的随机数
- 生成若干随机数,且不重复
- 用C#生成不重复的随机数
- C# 使用Guid类生成不重复的随机数
- VB小程序:生成十个不重复的随机数
- C#实现的不重复随机数序列生成算法
- C#生成不重复随机数的方法