首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL RAND() 函數詳解:隨機數生成與隨機排序

     編輯:MySQL 綜合教學

MySQL RAND() 函數詳解:隨機數生成與隨機排序

RAND() 返回 0 到 1 之間的隨機浮點數。支援種子參數實現可重複序列,常用於隨機抽樣、打亂順序。

1. 基本隨機數

mysql> SELECT RAND(), RAND(), RAND();
+------------------+-----------------+------------------+
| RAND()           | RAND()          | RAND()           |
+------------------+-----------------+------------------+
| 0.45464584925645 | 0.1824410643265 | 0.54826780459682 |
+------------------+-----------------+------------------+

2. 種子與可重複序列

mysql> SELECT RAND(1), RAND(), RAND();
+------------------+------------------+------------------+
| RAND(1)          | RAND()           | RAND()           |
+------------------+------------------+------------------+
| 0.18109050223705 | 0.75023211143001 | 0.20788908117254 |
+------------------+------------------+------------------+

同一連接中,首次帶種子調用後,後續無參數 RAND() 產生確定序列。不同連接間相互獨立。

3. 隨機排序 ORDER BY RAND()

打亂 employee_tbl 行順序:

mysql> SELECT * FROM employee_tbl ORDER BY RAND();

每次執行結果順序不同,適合抽獎、A/B 測試分桶等場景。

4. 效能警示

  • ORDER BY RAND() 會導致全表掃描並生成臨時表排序,大表(>1萬行)極慢。
  • 大表隨機抽樣建議:WHERE RAND() < 0.01(伯努利採樣)或應用層生成隨機 ID 再 IN 查詢。
  • MySQL 8.0+ 可結合 TABLESAMPLE(實驗特性)或使用 UUID() 排序近似隨機。

5. 範圍隨機整數

生成 [min, max] 整數:

SELECT FLOOR(min + RAND() * (max - min + 1));
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved