日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL 生成隨機數字、字符串、日期、驗證碼及 UUID的方法

瀏覽:64日期:2023-10-06 09:16:21

上一篇介紹了如何在 Oracle 生成隨機數字、字符串、日期、驗證碼以及 UUID,今天我們繼續討論在 MySQL 中生成各種隨機數據的方法。

📝計算機生成的都是偽隨機數,并不是真正的物理隨機數。

生成隨機數字生成 0 到 1 之間的隨機數

MySQL 中的 RAND 函數可以用于生成一個大于等于 0 小于 1 的隨機數字。例如:

SELECT rand();rand() |------------------|0.7245639057127423|SELECT rand();rand() |-------------------|0.01697599982561171|

該函數返回的數據類型為 double,包含 16 位小數;每次調用都會返回不同的數據。

如果想要重現某些場景,需要確保每次運行時生成相同的隨機數。這種情況下可以為 RAND 函數傳遞一個輸入參數,設置一個隨機數種子。例如:

SELECT rand(1);rand(1) |-------------------|0.40540353712197724|SELECT rand(1);rand(1) |-------------------|0.40540353712197724|

從結果可以看出,相同的種子返回了相同的隨機數。

生成指定范圍內的隨機數

基于 RAND 函數和數學運算,可以返回任意兩個數字之間的隨機數:

low + RAND() * (high − low)

以上表達式將會返回一個大于等于 low,小于 high 的隨機數。例如:

SELECT 10 + rand(1) * 10;10 + rand(1) * 10 |------------------|14.054035371219772|

以上示例返回了一個大于等于 10 且小于 20 的隨機數字。

如果想要生成某個范圍內的隨機整數,可以加上 FLOOR 函數。例如:

SELECT floor(10 + rand(1) * (10)) AS rd;rd |----|14.0|

該語句返回了一個大于等于 10,小于等于 19(不是 20)的隨機整數。

生成 6 位數字手機驗證碼

我們已經獲得了指定范圍內的隨機整數,加上 LPAD 函數就可以生成由 6 位數字字符組成的手機驗證碼。例如:

SELECT lpad(floor(rand(999) * 1000000), 6, ’0’) AS captcha;captcha|-------|088146 |

其中,lpad 函數可以確保數據不夠 6 位時在前面補足 0。

生成遵循正態分布的隨機數

RAND 函數生成的是一個遵循均勻分布的隨機數,MySQL 沒有提供生成遵循正態分布(normal distribution)的隨機數。我們可以創建一個存儲函數來模擬正態分布的隨機數:

delimiter //create function normal_distrib(mean double, stdev double) returns double no sqlbeginset @x = rand(), @y = rand();set @nd = (sqrt(-2 * log(@x)) * cos(2 * pi() * @y)) * stdev + mean;return @nd;end//delimiter ;

以上函數利用 Box-Muller 變換算法通過兩個平均分布的隨機數生成正態分布的隨機數。

以下語句通過 normal_distrib 函數生成了一個期望值為 0,標準差為 1 的正態分布隨機數:

SELECT normal_distrib(0,1);normal_distrib(0,1)|-------------------| 1.4930564399841173|

以下語句可以用于驗證 normal_distrib 函數是否遵循正態分布:

with recursive temp(val) as ( select normal_distrib(0,1) union all select normal_distrib(0,1) from temp limit 1000000)select /*+ set_var(cte_max_recursion_depth = 1m) */avg(val),std(val)from temp;avg(val) |std(val) |---------------------|------------------|-0.002340136192616743|0.9994844557755181|

通過運行 1000000 次,計算這些數據的平均值和標準差,返回結果非常接近 0 和 1。

生成隨機字符串生成固定長度的隨機字符串

除了隨機數字之外,有時候我們也需要生成一些隨機的字符串。MySQL 沒有提供專門生成隨機字符串的函數,但是可以通過其他函數進行模擬。例如:

SELECT char(floor(rand() * 26)+65) as rand_char;rand_char|---------|T |

以上查詢返回了一個隨機的大寫字母,char 函數用于將 ASCII 碼轉換為對應的字符。我們可以基于該查詢進一步創建一個存儲函數:

delimiter //create function rand_string(len integer) returns text no sqlbegin declare counter int default 1; declare str text default ’’; if len < 1 then return null; end if; while counter <= len do set str = concat(str, char(floor(rand() * 94) + 33)); set counter = counter + 1; end while; return str;end//delimiter ;

rand_string 函數可以返回由任意可打印字符(ASCII 碼從 33 到 126)組成的隨機字符串。例如:

rand_string(8)|--------------|7j5dz[58 |

以上示例返回了一個長度為 8,由可打印字符組成的隨機字符串。

另外,MySQL 中的 elt 函數也可以用于返回指定位置中的元素。例如:

SELECT elt(1 + floor(rand() * 36), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ’A’,’B’,’C’,’D’,’E’,’F’,’G’, ’H’,’I’,’J’,’K’,’L’,’M’,’N’, ’O’,’P’,’Q’,’R’,’S’,’T’, ’U’,’V’,’W’,’X’,’Y’,’Z’) as val;val|---|B |

以上語句返回了一個隨機的數字或者大寫字母,將其替換到 rand_string 函數可以返回一個由數字和大寫字母組成的隨機字符串。

生成可變長度的隨機字符串

那么,怎么返回一個長度可變的隨機字符串呢?很簡單,為 rand_string 函數指定一個隨機的長度參數即可。例如:

SELECT rand_string(floor(10 + rand() * 11));rand_string(floor(10 + rand() * 11))|------------------------------------|4U13MjO+($}k'cO@5%[ |

以上示例返回了一個長度大于等于 10 且小于等于 20,由可打印字符組成的隨機字符串。

生成隨機日期和時間

將指定日期增加一個隨機的數字,就可以得到隨機的日期。例如:

SELECT date_add(’2020-01-01’, interval rand() * 31 day) rand_date;rand_date |----------|2020-01-19|

以上示例返回了 2020 年 1 月中的某個隨機日期。以下語句則返回了一天中的某個隨機時間:

SELECT sec_to_time(rand() * 3600) rand_time;rand_time |------------------|00:05:29.546878000|

其中,sec_to_time 函數用于將秒數轉換為時間數據。

獲取表中的隨機記錄

對于返回多行數據的查詢語句,RAND 函數每次都會返回不同的隨機數據。例如:

SELECT rand(1) FROM employee;rand(1) |--------------------| 0.40540353712197724| 0.8716141803857071| 0.1418603212962489|...

利用這個特性,我們可以從表中返回隨機的數據行。例如:

SELECT emp_id,emp_nameFROM employeeORDER BY rand(1)LIMIT 5;emp_id|emp_name |------|----------| 6|魏延 | 14|張苞 | 16|周倉 | 15|趙統 | 1|劉備 |

以上示例從 employee 表中返回了 5 行隨機記錄。該方法需要為表中的每行數據都生成一個隨機數,然后進行排序;所以會隨著表中的數據量增加而逐漸變慢。

如果表中存在自增主鍵,也可以基于主鍵生成一個隨機數據。例如:

SELECT round(rand() * (SELECT max(emp_id) FROM employee)) AS id;id |----|10.0|

然后基于這個隨機數返回一條隨機的記錄:

SELECT e.emp_id, e.emp_nameFROM employee eINNER JOIN (SELECT round(rand() * (SELECT max(emp_id) FROM employee)) AS id ) AS tWHERE e.emp_id >= t.idLIMIT 1;emp_id|emp_name|------|--------| 9|趙云 |

這種方法一次只能返回一條隨機記錄,而且只有當自增字段的值沒有間隙時才會返回均勻分布的隨機記錄。

生成 UUID

UUID(Universal Unique Identifier)或者 GUID(Globally Unique Identifier)是一個 128 比特的數字,可以用于唯一標識每個網絡對象或資源。由于它的生成機制,一個 UUID 可以保證幾乎不會與其他 UUID 重復,因此常常用于生成數據庫中的主鍵值。

MySQL 提供了一個系統函數 UUID,可以用于生成 UUID。例如:

SELECT uuid();uuid()|------------------------------------|35f67fde-e0e9-11ea-9d25-0800272142b1|

如果想要生成沒有中劃線(-)的 UUID,可以使用 REPLACE 函數:

SELECT replace(uuid(),’-’,’’);replace(uuid(),’-’,’’) |--------------------------------|8505290be0ea11ea9d250800272142b1|

除此之外,MySQL 還提供了一個UUID_SHORT 函數,它可以返回一個 64 比特的無符號整數。例如:

SELECT uuid_short();uuid_short() |-----------------|98862025337208832|

該函數返回的是一個“短的”唯一標識符,只有滿足以下條件時才具有唯一性:

當前服務器的 server_id 位于 0 到 255 之間,并且在復制結構中具有唯一性; 重啟 mysqld 前后沒有將服務器主機的系統時間往回調整; 每秒鐘的平均調用次數少于 1600 萬次。總結

本文介紹了在 MySQL 數據庫中生成隨機數據的方法,包括隨機數字、驗證碼、隨機字符串以及隨機日期和時間等,同時還介紹了如何從表中返回隨機記錄,以及如何生成 UUID。

到此這篇關于MySQL 生成隨機數字、字符串、日期、驗證碼及 UUID的方法的文章就介紹到這了,更多相關MySQL 生成隨機數字 UUID內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人精品天堂一区二区三区| 中文字幕成人| 国产日韩欧美一区在线| 精品网站aaa| 久久精品国产亚洲夜色av网站 | 麻豆精品网站| 国产亚洲观看| 亚洲www啪成人一区二区| 天堂va蜜桃一区二区三区| 日本麻豆一区二区三区视频| 成人在线视频免费看| 亚洲一区二区动漫| 麻豆一区二区三| 欧美三区四区| 免费人成精品欧美精品| 欧美国产专区| 国内自拍视频一区二区三区| 亚洲精品小说| 国产精品亚洲产品| 丝袜美腿诱惑一区二区三区| 视频一区视频二区在线观看| 乱一区二区av| 中文在线一区| 国产一区2区在线观看| 免费人成网站在线观看欧美高清| 国语精品一区| 性欧美长视频| 日本欧美国产| 视频一区在线播放| 国产成人久久精品一区二区三区| 久久大逼视频| 福利一区二区免费视频| 免费精品视频| 久久精品免费看| 日韩一区二区久久| 麻豆国产91在线播放| 婷婷色综合网| 久久丁香四色| 亚洲一级在线| 粉嫩av一区二区三区四区五区 | 99精品美女| 日韩精品久久理论片| 日韩电影在线视频| 日韩欧美久久| 久久中文视频| 老司机精品视频网| 在线观看亚洲精品福利片| 都市激情国产精品| 91亚洲精品视频在线观看| 蜜桃视频欧美| 久久免费影院| 亚洲精品日韩久久| 婷婷成人综合| 精品国产欧美日韩一区二区三区| 三级欧美在线一区| 香蕉国产精品| 久久精品网址| 日韩精品福利一区二区三区| 日韩精品首页| 捆绑调教美女网站视频一区| 日韩中文字幕视频网| 在线国产一区二区| 激情综合婷婷| 欧美有码在线| 亚洲一级在线| 久久精品123| 久久精品九色| 久久精品 人人爱| 香蕉成人久久| 亚洲成人二区| 欧美精品aa| 亚洲18在线| 一区久久精品| 久久中文视频| 欧美日韩视频免费观看| 国产精品mm| 日韩福利视频一区| 在线观看一区| 亚洲深夜av| 激情综合网址| 亚洲成人va| 9999国产精品| 精品国产欧美| 国产高清精品二区| 国产免费播放一区二区| 亚洲综合五月| 国产亚洲高清视频| 亚洲激情另类| 91精品电影| 欧美精品一区二区久久| 高清av不卡| 日韩成人精品一区| 精品一区二区三区亚洲| 国产精品毛片视频| 国产日韩精品视频一区二区三区| 日韩精品一区二区三区av| 蜜桃视频一区二区| 视频一区视频二区中文字幕| 国产亚洲毛片在线| 中文一区二区| 国产精品91一区二区三区| 欧美成a人免费观看久久| 免费观看亚洲| 丝袜诱惑一区二区| 中文在线а√在线8| 午夜久久中文| 91精品一区二区三区综合在线爱| 亚洲1234区| 久久九九精品| 群体交乱之放荡娇妻一区二区| 久久婷婷久久| 欧美日韩中文字幕一区二区三区| 久久中文字幕av| 91高清一区| 日韩专区欧美专区| 日韩制服丝袜先锋影音| 国产一区二区精品| 亚洲专区视频| 国产九一精品| 精品久久不卡| 日韩av福利| 国产一区亚洲| 9色精品在线| 亚洲尤物在线| 亚洲精品动态| 国产精品亚洲二区| 国产精品久久久久久久免费观看| 成人福利av| 国产一区日韩一区| 美国三级日本三级久久99| 一区二区国产精品| 欧美一级一区| 精品中文在线| 欧美成人基地 | 久久久久久一区二区| 99久久精品费精品国产| 在线亚洲国产精品网站| 免费久久99精品国产| 久久国产免费看| 国产在线视频欧美一区| 香蕉久久精品| 亚洲精品在线国产| 国产精品theporn| 日韩不卡一区| 欧美日韩国产精品一区二区亚洲| 免费的成人av| 国产精品一区二区三区四区在线观看| 精品视频黄色| 亚洲午夜电影| 日韩极品在线观看| 久久久久久久欧美精品| 亚洲美女久久| 精品一区二区三区亚洲 | 美女精品久久| 久久免费大视频| 天海翼亚洲一区二区三区| 精品欠久久久中文字幕加勒比| 欧美综合另类| 欧美亚洲免费| 欧美日韩精品在线一区| 日本色综合中文字幕| 国内在线观看一区二区三区| 国产精品视区| 精品伊人久久| 丝袜脚交一区二区| 久久久久九九精品影院| 五月天激情综合网| 国产精品成人国产| 免费久久精品| 国产精品一区亚洲| 亚洲精品91| 久久a爱视频| 欧美特黄一级| 久久影院资源站| 亚洲综合另类| 97人人精品| 视频一区二区三区在线| 久久久久久久欧美精品| 久久精品欧美一区| 国产另类在线| 日韩亚洲在线| 国产精品久一| 99视频在线精品国自产拍免费观看| 国产精品资源| 日韩视频在线一区二区三区| 精品三级av| 日韩国产在线观看| 亚洲特色特黄| 精品黄色一级片| 日本伊人久久| 婷婷中文字幕一区| 国产高潮在线| 欧美日韩 国产精品| 99视频一区| 亚洲人成在线网站| 国产精品啊v在线| 91精品二区| 国产a亚洲精品| 欧美偷窥清纯综合图区| 亚洲自啪免费|