首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 指定範圍隨機數函數 RAND() 使用技巧:從 0-1 到任意區間 [x,y] 的數學推導與實戰

     編輯:MySQL 資料庫相關知識

MySQL RAND() 僅回傳 0-1 浮點數,無參數版本。需求:產生任意區間 [x, y] 隨機整數(如瀏覽量作弊 +234~5678)。本文給出通用公式推導與實戰應用。

核心公式

ROUND(RAND() * (y - x) + x)

推導過程

  1. 目標區間:[x, y],例 [234, 5678]
  2. 平移至 0 起始:[0, y-x] → [0, 5444]
  3. 縮放至 [0, 1]:除以 (y-x) → RAND() * (y-x)
  4. 還原平移:RAND() * (y-x) + x
  5. 取整:ROUND(...) 或 FLOOR(...)

通用推導

rand(x, y)  -- 假設支援雙參數
= rand(0, y-x) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) + x
= rand() * (y-x) + x

實戰範例

文章瀏覽量作弊 +234~5678

UPDATE articles SET views = views + ROUND(RAND() * (5678 - 234) + 234);

隨機延遲 100-500ms(應用層)

SELECT ROUND(RAND() * (500 - 100) + 100);  -- 回傳毫秒數

分桶抽樣:將用戶隨機分配到 10 個桶

UPDATE users SET bucket = FLOOR(RAND() * 10);  -- 0-9

擴展:PHP mt_rand 對比

  • PHP mt_rand(x, y) 直接支援雙參數
  • MySQL 需手動推導,但可在 SQL 層面完成,避免應用層往返

總結

一個簡單的數學變換 rand() * (y-x) + x,將內建 0-1 隨機數映射到任意業務區間。**降低需求到現有能力可及範圍**,是演算法設計的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved