用MySQL里的Rand()生成不连续重复的随机数年龄以及随机姓名字符串_MySQL
前言:
RAND函数,返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
一,朋友问题描述如下:
通过一段存储过程来实现向表里插入100数据,其中年龄随机
(2),然后我写出的代码如下:
-- 创建用户表,在project里
(3),执行结果
call pro3(100); -- 执行过程
二,分析原因
所以存储过程改动如下:
DELIMITER $$ USE `test`$$ DROP PROCEDURE IF EXISTS `pro3`$$ CREATE PROCEDURE `pro3`(num INT) BEGIN DECLARE fname CHAR(1); DECLARE name1 CHAR(1); DECLARE name2 CHAR(1); DECLARE fullname VARCHAR(3); DECLARE pre_fullname VARCHAR(3) DEFAULT \'\'; DECLARE age INT; DECLARE i INT DEFAULT 1; WHILE i 1 THEN SET i=i; ELSEIF fullname IS NULL THEN SET i=i; ELSE INSERT INTO user1 VALUES(NULL,fullname,age); SET i = i + 1; END IF ; END WHILE; END$$ DELIMITER 三,执行改动后的存储过程,查看效果 mysql> DELIMITER $$ mysql> USE `test`$$ Database changed mysql> DROP PROCEDURE IF EXISTS `pro3`$$ Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> CREATE PROCEDURE `pro3`(num INT) -> BEGIN -> DECLARE fname CHAR(1); -> DECLARE name1 CHAR(1); -> DECLARE name2 CHAR(1); -> DECLARE fullname VARCHAR(3); -> DECLARE pre_fullname VARCHAR(3) DEFAULT \'\'; -> DECLARE age INT; -> DECLARE i INT DEFAULT 1; -> WHILE i SET fname = SUBSTRING(\'赵钱孙李周吴郑王\',FLOOR(1+8*RAND()),1); -> SET name1 = SUBSTRING(\'一二三四五六七八九十甲乙丙丁\',ROUND(1+14*RAND()),1); -> SET name2 = SUBSTRING(\'一二三四五六七八九十甲乙丙丁\',ROUND(1+14*RAND()),1); -> -> IF ROUND(RAND())=0 THEN -> SET fullname = CONCAT(fname,name1); -> END IF; -> IF ROUND(RAND())=1 THEN -> SET fullname = CONCAT(fname,name1,name2); -> END IF; -> -> SET age = FLOOR(20+31*RAND()); -> /* 给临时变量赋值,看最新的一条记录的name值 */ -> SELECT NAME INTO pre_fullname FROM user1 ORDER BY id DESC LIMIT 1; -> /* 开始判断,如果刚赋值的name跟上一次赋值的name值一样,就跳过,i保持不变,继续取值;否则i+1,继续循环取值*/ -> IF fullname=pre_fullname AND i>1 THEN -> Display all 799 possibilities? (y or n) -> SET i=i; -> ELSEIF fullname IS NULL THEN -> Display all 799 possibilities? (y or n) -> SET i=i; Display all 799 possibilities? (y or n) -> SET i=i; -> ELSE -> Display all 799 possibilities? (y or n) -> INSERT INTO user1 VALUES(NULL,fullname,age); -> Display all 799 possibilities? (y or n) -> SET i = i + 1; -> END IF ; -> END WHILE; -> END$$ Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ; mysql> mysql> truncate table user1; Query OK, 0 rows affected (0.01 sec) mysql> select * from user1; Empty set (0.00 sec) mysql> call pro3(100); Query OK, 1 row affected (0.11 sec) mysql> select * from user1; +-----+-----------+-----+ | id | name | age | +-----+-----------+-----+ | 1 | 吴甲九 | 32 | | 2 | 赵丙 | 49 | | 3 | 钱二 | 40 | | 4 | 郑二丙 | 34 | | 5 | 孙四三 | 39 | | 6 | 钱五十 | 39 | | 7 | 赵五 | 23 | | 8 | 郑九 | 22 | | 9 | 钱九七 | 47 | | 10 | 郑七乙 | 39 | | 11 | 孙丙二 | 44 | | 12 | 吴三九 | 30 | | 13 | 钱九四 | 28 | | 14 | 王十九 | 49 | | 15 | 周丙乙 | 43 | | 16 | 王十 | 33 | | 17 | 钱乙七 | 36 | | 18 | 赵七四 | 32 | | 19 | 郑八二 | 31 | | 20 | 赵二 | 35 | | 21 | 赵丙 | 26 | | 22 | 郑甲丁 | 38 | | 23 | 周丙九 | 50 | | 24 | 李丙五 | 27 | | 25 | 李五三 | 37 | | 26 | 孙丙六 | 46 | | 27 | 钱八 | 37 | | 28 | 周七六 | 40 | | 29 | 李一一 | 45 | | 30 | 钱十七 | 22 | | 31 | 吴七一 | 49 | | 32 | 吴丙六 | 39 | | 33 | 吴四四 | 50 | | 34 | 郑八丙 | 28 | | 35 | 吴五七 | 26 | | 36 | 吴甲 | 46 | | 37 | 钱四 | 39 | | 38 | 王丙九 | 24 | | 39 | 王八八 | 38 | | 40 | 吴乙丙 | 35 | | 41 | 吴丙七 | 39 | | 42 | 周甲丁 | 31 | | 43 | 钱二甲 | 25 | | 44 | 钱五丁 | 32 | | 45 | 孙四二 | 28 | | 46 | 李七丙 | 37 | | 47 | 钱七七 | 46 | | 48 | 郑乙四 | 33 | | 49 | 钱甲丁 | 34 | | 50 | 王五 | 37 | | 51 | 吴一 | 44 | | 52 | 王二十 | 33 | | 53 | 郑四 | 41 | | 54 | 钱九八 | 29 | | 55 | 李十十 | 24 | | 56 | 钱六七 | 44 | | 57 | 王二 | 38 | | 58 | 周五 | 36 | | 59 | 吴九 | 44 | | 60 | 赵丙 | 38 | | 61 | 李五五 | 20 | | 62 | 王八乙 | 33 | | 63 | 王丙八 | 49 | | 64 | 王九六 | 38 | | 65 | 钱七 | 45 | | 66 | 赵二二 | 36 | | 67 | 钱五乙 | 40 | | 68 | 孙甲七 | 43 | | 69 | 郑甲五 | 47 | | 70 | 赵丙 | 20 | | 71 | 郑四 | 43 | | 72 | 孙丙五 | 24 | | 73 | 孙三 | 33 | | 74 | 赵四乙 | 31 | | 75 | 李 | 44 | | 76 | 吴九丁 | 43 | | 77 | 郑甲一 | 33 | | 78 | 李三五 | 37 | | 79 | 王二 | 31 | | 80 | 赵七丙 | 35 | | 81 | 吴三十 | 22 | | 82 | 李二 | 50 | | 83 | 李八 | 49 | | 84 | 王一 | 27 | | 85 | 王三 | 22 | | 86 | 周五 | 45 | | 87 | 郑八 | 44 | | 88 | 郑甲二 | 48 | | 89 | 赵乙 | 37 | | 90 | 周四五 | 30 | | 91 | 周二七 | 41 | | 92 | 孙四 | 21 | | 93 | 周丙七 | 24 | | 94 | 孙丁乙 | 32 | | 95 | 周九一 | 20 | | 96 | 周九 | 32 | | 97 | 赵二一 | 26 | | 98 | 周丁五 | 47 | | 99 | 孙三 | 38 | | 100 | 吴十四 | 29 | +-----+-----------+-----+ 100 rows in set (0.00 sec)
四,RAND()与RAND(N)区别
每个种子产生的随机数序列是不同的,如果传入N参数执行RAND(N),则每次查询到的随机数都是固定的,如果没有传入N参数,则每次都是随机的值。如下所示:
mysql> SELECTRAND(),RAND(5); +--------------------+---------------------+ | RAND() | RAND(5) | +--------------------+---------------------+ | 0.7946587333405938 | 0.40613597483014313 | +--------------------+---------------------+ 1 row in set (0.00 sec) mysql> SELECT RAND(),RAND(5); +---------------------+---------------------+ | RAND() | RAND(5) | +---------------------+---------------------+ | 0.12910866749389904 | 0.40613597483014313 | +---------------------+---------------------+ 1 row in set (0.00 sec) mysql> SELECT RAND(),RAND(5); +-------------------+---------------------+ | RAND() | RAND(5) | +-------------------+---------------------+ | 0.261567168181359 | 0.40613597483014313 | +-------------------+---------------------+ 1 row in set (0.00 sec) mysql> SELECT RAND(),RAND(5); +--------------------+---------------------+ | RAND() | RAND(5) | +--------------------+---------------------+ | 0.9205098691587428 | 0.40613597483014313 | +--------------------+---------------------+ 1 row in set (0.00 sec) mysql> SELECT RAND(),RAND(5); +--------------------+---------------------+ | RAND() | RAND(5) | +--------------------+---------------------+ | 0.8178478719832821 | 0.40613597483014313 | +--------------------+---------------------+ 1 row in set (0.00 sec) mysql>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP中int型別轉字串的方法詳解在PHP開發中,常會遇到將int型別轉換為字串型別的需求。這種轉換可以透過多種方式實現,本文將詳細介紹幾種常用的方法,並附帶具體的程式碼範例來幫助讀者更好地理解。一、使用PHP內建函數strval()PHP提供了一個內建函數strval(),可以將不同類型的變數轉換為字串類型。當我們需要將int型別轉換為字串型別時,

1.先開啟pycharm,進入到pycharm首頁。 2.然後新建python腳本,右鍵--點選new--點選pythonfile。 3.輸入一段字串,代碼:s="-"。 4.接著需要把字串裡面的符號重複20次,代碼:s1=s*20。5、輸入列印輸出代碼,代碼:print(s1)。 6.最後運行腳本,在最底部會看到我們的回傳值:-就重複了20次。

Golang中如何檢查字串是否以特定字元開頭?在使用Golang程式設計時,經常會遇到需要檢查一個字串是否以特定字元開頭的情況。針對這項需求,我們可以使用Golang中的strings套件所提供的函數來實現。接下來將詳細介紹如何使用Golang檢查字串是否以特定字元開頭,並附上具體的程式碼範例。在Golang中,我們可以使用strings套件中的HasPrefix

標題:Golang中判斷字串是否以指定字元結尾的方法在Go語言中,有時候我們需要判斷一個字串是否以特定的字元結尾,這在處理字串時十分常見。本文將介紹如何使用Go語言來實現這項功能,同時提供程式碼範例供大家參考。首先,讓我們來看看Golang中如何判斷一個字串是否以指定字元結尾的方法。 Golang中的字串可以透過索引來取得其中的字符,而字串的長度可

解決PHP中16進位轉字串出現中文亂碼的方法在PHP程式設計中,有時候我們會遇到需要將16進位表示的字串轉換為正常的中文字元的情況。然而,在進行這個轉換的過程中,有時會遇到中文亂碼的問題。這篇文章將為您提供解決PHP中16進位轉字串出現中文亂碼的方法,並給出具體的程式碼範例。使用hex2bin()函數進行16進位轉換PHP內建的hex2bin()函數可以將1

Go語言是一種強大且靈活的程式語言,它提供了豐富的字串處理功能,包括字串截取。在Go語言中,我們可以使用切片(slice)來截取字串。接下來,將詳細介紹如何在Go語言中截取字串,並附上具體的程式碼範例。一、使用切片截取字串在Go語言中,可以使用切片表達式來截取字串的一部分。切片表達式的語法如下:slice:=str[start:end]其中,s

PHP字串比對技巧:避免模糊包含表達式在PHP開發中,字串比對是常見的任務,通常用於尋找特定的文字內容或驗證輸入的格式。然而,有時候我們需要避免使用模糊的包含表達式來確保匹配的準確性。本文將介紹一些在PHP中進行字串匹配時避免模糊包含表達式的技巧,並提供具體的程式碼範例。使用preg_match()函數進行精確比對在PHP中,可以使用preg_mat

PHP字串操作:有效去除空格的實用方法在PHP開發中,經常會遇到需要對字串進行去除空格操作的情況。去除空格可以讓字串更加整潔,方便後續的資料處理和顯示。本文將介紹幾種有效的去除空格的實用方法,並附上具體的程式碼範例。方法一:使用PHP內建函數trim()PHP內建函數trim()可以移除字串兩端的空格(包括空格、製表符、換行符等),非常方便且簡單易用
