数据库
首页 > 数据库> > mysql Rand()函数导致意外的多行结果

mysql Rand()函数导致意外的多行结果

作者:互联网

当我尝试使用RAND()函数通过ID从表中获取随机行时,出现了意外的不稳定结果.以下查询(其中id列是主键)返回1、2或更多行:

我也尝试了产生相同结果的下一个变体:

SELECT id, word FROM words WHERE id = FLOOR(RAND() * 1000)

我为任务找到了另一个解决方案:

SELECT id, word FROM words ORDER BY RAND() LIMIT 1

但是我想知道为什么使用如此基本的功能使MySQL的行为如此出乎意料.吓到我了.

我在不同的IDE中实验了相同的结果.

解决方法:

该行为并不意外.按行评估RAND()函数:

SELECT RAND() FROM sometable LIMIT 10

+----------------------+
| RAND()               |
+----------------------+
|   0.7383128467372738 |
|   0.6141578719151746 |
|   0.8558508500976961 |
|   0.4367806654766022 |
|   0.6163508078235674 |
|   0.7714120734216757 |
|   0.0080079743713214 |
|   0.7258036823252251 |
|   0.6049945192458057 |
|   0.8475615799869984 |
+----------------------+

请记住,此查询:

SELECT * FROM words WHERE id = FLOOR(RAND() * 1000)

表示id在0到999之间的每一行都有1/1000的概率被选择!

标签:mysql-5-6,random,sql,mysql
来源: https://codeday.me/bug/20191108/2005900.html