MySQL rand()函数、rand(n)、生成不重复随机数 |
有时候我们想要生成一个唯一不重复的随机数,mysql提供了rand()函数来实现该功能 。 本文首先介绍rand()的基本使用,分别介绍round与rand的合用、ceiling与rand的合用、floor与rand的合用、md5与rand的合用 一、rand()与rand(n)
rand(n)函数:
注意:频繁地在一个很大的数据集上使用RAND()可能会导致性能问题,因为这会导致数据库引擎在每次查询时都生成一个新的随机数 。 示例如下: mysql> select rand(),rand(),rand(); +--------------------+--------------------+-------------------+ | rand() | rand() | rand() | +--------------------+--------------------+-------------------+ | 0.9601070507989331 | 0.7956807881553478 | 0.098082819113585 | +--------------------+--------------------+-------------------+ 1 row in set (0.00 sec) mysql> select rand(1),rand(1),rand(1); +---------------------+---------------------+---------------------+ | rand(1) | rand(1) | rand(1) | +---------------------+---------------------+---------------------+ | 0.40540353712197724 | 0.40540353712197724 | 0.40540353712197724 | +---------------------+---------------------+---------------------+ 1 row in set (0.00 sec) 我们发现:
上面我们说rand(n)函数,每次使用相同的种子值n,将得到相同的随机排序结果,这是什么意思呢?为了便于理解上面两种示例,我们把rand(),rand(n) 结合表数据一起看一下 。 mysql> CREATE TABLE t (i INT); Query OK, 0 rows affected (0.42 sec) mysql> INSERT INTO t VALUES(1),(2),(3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 -- 如下:rand()函数查询了两次,每次查询每一行返回的随机数都不相同 mysql> SELECT i, RAND() FROM t; +------+------------------+ | i | RAND() | +------+------------------+ | 1 | 0.61914388706828 | | 2 | 0.93845168309142 | | 3 | 0.83482678498591 | +------+------------------+ 3 rows in set (0.00 sec) mysql> SELECT i, RAND() FROM t; +------+------------------+ | i | RAND() | +------+------------------+ | 1 | 0.35877890638893 | | 2 | 0.28941420772058 | | 3 | 0.37073435016976 | +------+------------------+ 3 rows in set (0.00 sec) -- 如下:rand(n)函数查询了两次 -- 同一次查询中可能会返回重复的数字(注意:数据量小的情况不一定有重复值) -- 但是多次查询时,第二次与第一次返回的结果相同 。 mysql> SELECT i, RAND(3) FROM t; +------+------------------+ | i | RAND(3) | +------+------------------+ | 1 | 0.90576975597606 | | 2 | 0.37307905813035 | | 3 | 0.90576975597606 | +------+------------------+ 3 rows in set (0.00 sec) mysql> SELECT i, RAND(3) FROM t; +------+------------------+ | i | RAND(3) | +------+------------------+ | 1 | 0.90576975597606 | | 2 | 0.37307905813035 | | 3 | 0.90576975597606 | +------+------------------+ 3 rows in set (0.01 sec) 可以发现:
二、rand()使用示例2.1、rand()与order by/group by使用随机排序分组rand()函数用于随机生成一个不重复的数字,所以当rand()与order by组合使用时,可以实现数据随机排序 。
SELECT * FROM tbl_name ORDER BY RAND(); 2.2、round()与rand()的组合使用
实例1.获取某个区间的数据 -- 获取0-100之间的整数 select round(100*rand(),0): 实例2:获取[40,60)的两位小数 select 40+round(20*rand(),2) ps:20为60-40的差值 2.3、rand与ceiling的组合使用
实例1:select ceiling(1.12)
实例3:随机获取[60,80)之间的整数 select ceiling(60+rand()*20); 2.4、rand与floor组合使用
实例1:select floor(53.68) 实例2:select floor(rand());ps:rand()向下取整必然为0 实例3:[40,52)之间取整 select floor(40+rand()*12); 2.5、rand与md5组合使用
实例1:select md5(123.44); 实例2:select md5(rand()); 三、总结3.1、rand()与rand(n)的区别rand()函数
rand(n:int)函数
到此这篇关于MySQL rand()函数、rand(n)、生成不重复随机数的文章就介绍到这了,更多相关MySQL rand() rand(n)内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |