如何批量生成MySQL不重復(fù)手機(jī)號(hào)大表實(shí)例代碼
前言
在MySQL很多測(cè)試場(chǎng)景,需要人工生成一些測(cè)試數(shù)據(jù)來(lái)測(cè)試。本文提供一個(gè)構(gòu)造MySQL大表存儲(chǔ)過(guò)程,可以生成包含用戶(hù)名,手機(jī)號(hào)碼,出生日期等字段。也可以通過(guò)濾重來(lái)使得手機(jī)號(hào)碼不重復(fù),模擬現(xiàn)實(shí)場(chǎng)景。
一、生成腳本
生成說(shuō)明:
以下使用存儲(chǔ)過(guò)程批量生成包含用戶(hù)名,手機(jī)號(hào),出生日期等字段大表。
該存儲(chǔ)過(guò)程使用基于uid作為主鍵,因此會(huì)生成少量重復(fù)手機(jī)號(hào)碼,后面有濾重SQL腳本。
如果想一次性生成不重復(fù)手機(jī)號(hào)碼,可以考慮修改以下腳本,去掉uid,基于mobile列作為主鍵
DROP TABLE IF EXISTS big_table;
DROP PROCEDURE IF EXISTS prc_gen_user;
CREATE TABLE `big_table` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`mobile` char(11) DEFAULT NULL,
`passwd` varchar(50) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`sex` tinyint DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`updated_time` datetime DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE PROCEDURE prc_gen_user(l_cnt int)
BEGIN
DECLARE x INT DEFAULT 0;
DECLARE p char(11);
WHILE x < l_cnt
DO
SET x = x + 1;
SET p =
concat('1',
substring(cast(3 + (rand() * 10) % 7 AS char(50)), 1, 1),
right(left(trim(cast(rand() AS char(50))), 11), 9));
INSERT INTO big_table(mobile,
passwd,
name,
sex,
birthday,
updated_time)
VALUES (
p,
md5(ceiling(rand() * 1000000)),
concat(
substring(
'趙錢(qián)孫李周吳鄭王馮陳諸衛(wèi)蔣沈韓楊朱秦尤許何呂施張孔曹?chē)?yán)華金
魏陶姜戚謝鄒喻柏水竇章云蘇潘葛奚范彭郎魯韋昌馬苗鳳花方俞任
袁柳酆鮑史唐費(fèi)廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂(lè)于時(shí)傅皮齊康
伍余元卜顧孟平黃和穆蕭尹姚邵堪汪祁毛禹狄米貝明臧計(jì)伏成戴談
宋茅龐熊紀(jì)舒屈項(xiàng)祝董粱杜阮藍(lán)閔席季麻強(qiáng)賈路婁危江童顏郭梅盛
林刁鐘徐邱駱高夏蔡田樊胡凌霍虞萬(wàn)支柯咎管盧莫經(jīng)房裘干解應(yīng)宗
丁宣賁鄧郁單杭洪包諸左石崔吉鈕龔',
floor(1 + 190 * rand()),
1),
substring(
'明國(guó)華建文平志偉東海強(qiáng)曉生光林小民永杰軍金健一忠洪江福祥中
正振勇耀春大寧亮宇興寶少劍云學(xué)仁濤瑞飛鵬安亞澤世漢達(dá)衛(wèi)利勝
敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長(zhǎng)嘉紅山
賢陽(yáng)樂(lè)鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅(jiān)旭政傳
康繼翔棟仲權(quán)奇禮楠煒友年震鑫雷兵萬(wàn)星駿倫紹麟雨行才希彥兆貴
源有景升惠臣慧開(kāi)章潤(rùn)高佳虎根遠(yuǎn)力進(jìn)泉茂毅富博霖順信凡豪樹(shù)和
恩向道川彬柏磊敬書(shū)鳴芳培全炳基冠暉京欣廷哲保秋君勁軒帆若連
勛祖錫吉崇鈞田石奕發(fā)洲彪鋼運(yùn)伯滿(mǎn)庭申湘皓承梓雪孟其潮冰懷魯
裕翰征謙航士堯標(biāo)潔城壽楓革純風(fēng)化逸騰岳銀鶴琳顯煥來(lái)心鳳睿勤
延凌昊西羽百捷定琦圣佩麒虹如靖日詠會(huì)久昕黎桂瑋燕可越彤雁孝
憲萌穎藝夏桐月瑜沛誠(chéng)夫聲冬奎揚(yáng)雙坤鎮(zhèn)楚水鐵喜之迪泰方同濱邦
先聰朝善非恒晉汝丹為晨乃秀巖辰洋然厚燦卓楊鈺蘭怡靈淇美琪亦
晶舒菁真涵爽雅愛(ài)依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩(shī)璇琴素梅
玲蕾艷紫珍麗儀夢(mèng)倩伊茜妍碧芬兒嵐婷菊妮媛蓮娟一',
floor(1 + 400 * rand()),
1),
substring(
'明國(guó)華建文平志偉東海強(qiáng)曉生光林小民永杰軍金健一忠洪江福祥中
正振勇耀春大寧亮宇興寶少劍云學(xué)仁濤瑞飛鵬安亞澤世漢達(dá)衛(wèi)利勝
敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長(zhǎng)嘉紅山
賢陽(yáng)樂(lè)鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅(jiān)旭政傳
康繼翔棟仲權(quán)奇禮楠煒友年震鑫雷兵萬(wàn)星駿倫紹麟雨行才希彥兆貴
源有景升惠臣慧開(kāi)章潤(rùn)高佳虎根遠(yuǎn)力進(jìn)泉茂毅富博霖順信凡豪樹(shù)和
恩向道川彬柏磊敬書(shū)鳴芳培全炳基冠暉京欣廷哲保秋君勁軒帆若連
勛祖錫吉崇鈞田石奕發(fā)洲彪鋼運(yùn)伯滿(mǎn)庭申湘皓承梓雪孟其潮冰懷魯
裕翰征謙航士堯標(biāo)潔城壽楓革純風(fēng)化逸騰岳銀鶴琳顯煥來(lái)心鳳睿勤
延凌昊西羽百捷定琦圣佩麒虹如靖日詠會(huì)久昕黎桂瑋燕可越彤雁孝
憲萌穎藝夏桐月瑜沛誠(chéng)夫聲冬奎揚(yáng)雙坤鎮(zhèn)楚水鐵喜之迪泰方同濱邦
先聰朝善非恒晉汝丹為晨乃秀巖辰洋然厚燦卓楊鈺蘭怡靈淇美琪亦
晶舒菁真涵爽雅愛(ài)依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩(shī)璇琴素梅
玲蕾艷紫珍麗儀夢(mèng)倩伊茜妍碧芬兒嵐婷菊妮媛蓮娟一',
floor(1 + 400 * rand()),
1)),
ceiling(rand() * 10) % 2,
date(
now()
- INTERVAL (20 + ceiling(rand() * 100) % 40) YEAR),
concat('2018-',
1 + ceiling(rand() * 100) % 12,
'-',
1 + ceiling(rand() * 100) % 28))
ON DUPLICATE KEY UPDATE updated_time = now();
END WHILE;
END
二、數(shù)據(jù)填充
call prc_gen_user(1000); Query OK, 1 row affected (1.38 sec) select count(*) from big_table; +----------+ | count(*) | +----------+ | 1000 | +----------+ 1 row in set (0.00 sec) select 'Leshami' author,'http://blog.csdn.net/leshami' Blog; +---------+------------------------------+ | author | Blog | +---------+------------------------------+ | Leshami | http://blog.csdn.net/leshami | +---------+------------------------------+
三、濾重SQL語(yǔ)句
DELETE FROM big_table
WHERE mobile IN (SELECT mobile
FROM (SELECT u1.mobile
FROM big_table u1
GROUP BY u1.mobile
HAVING count(*) > 1) a)
AND uid NOT IN (SELECT uid
FROM (SELECT min(u2.uid) AS uid
FROM big_table u2
GROUP BY u2.mobile
HAVING count(*) > 1) b);
四、其它
本文參考了以下代碼,下面代碼實(shí)現(xiàn)是MySQL批量造用戶(hù)數(shù)據(jù),姓名/手機(jī)號(hào)/生日/密碼
DROP PROCEDURE IF EXISTS batchGenerateUsers;
DELIMITER $$
CREATE PROCEDURE batchGenerateUsers()
BEGIN
DECLARE x INT Default 0;
DECLARE p char(11);
WHILE x < 10000 DO
SET x=x+1;
SET p=concat('1', cast(3+(rand()*10)%7 as char(1)), right(left(trim(cast(rand() as char (20))), 11),9));
insert into my_users(mobile, passwd, name, sex, birthday, updated_time)
values(p,
md5(ceiling(rand()*1000000)),
concat(substring('趙錢(qián)孫李周吳鄭王馮陳諸衛(wèi)蔣沈韓楊朱秦尤許何呂施張孔曹?chē)?yán)華金魏陶姜戚謝鄒喻柏水竇章云蘇潘葛奚范彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費(fèi)廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂(lè)于時(shí)傅皮齊康伍余元卜顧孟平黃和穆蕭尹姚邵堪汪祁毛禹狄米貝明臧計(jì)伏成戴談宋茅龐熊紀(jì)舒屈項(xiàng)祝董粱杜阮藍(lán)閔席季麻強(qiáng)賈路婁危江童顏郭梅盛林刁鐘徐邱駱高夏蔡田樊胡凌霍虞萬(wàn)支柯咎管盧莫經(jīng)房裘干解應(yīng)宗丁宣賁鄧郁單杭洪包諸左石崔吉鈕龔',floor(1+190*rand()),1),substring('明國(guó)華建文平志偉東海強(qiáng)曉生光林小民永杰軍金健一忠洪江福祥中正振勇耀春大寧亮宇興寶少劍云學(xué)仁濤瑞飛鵬安亞澤世漢達(dá)衛(wèi)利勝敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長(zhǎng)嘉紅山賢陽(yáng)樂(lè)鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅(jiān)旭政傳康繼翔棟仲權(quán)奇禮楠煒友年震鑫雷兵萬(wàn)星駿倫紹麟雨行才希彥兆貴源有景升惠臣慧開(kāi)章潤(rùn)高佳虎根遠(yuǎn)力進(jìn)泉茂毅富博霖順信凡豪樹(shù)和恩向道川彬柏磊敬書(shū)鳴芳培全炳基冠暉京欣廷哲保秋君勁軒帆若連勛祖錫吉崇鈞田石奕發(fā)洲彪鋼運(yùn)伯滿(mǎn)庭申湘皓承梓雪孟其潮冰懷魯裕翰征謙航士堯標(biāo)潔城壽楓革純風(fēng)化逸騰岳銀鶴琳顯煥來(lái)心鳳睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日詠會(huì)久昕黎桂瑋燕可越彤雁孝憲萌穎藝夏桐月瑜沛誠(chéng)夫聲冬奎揚(yáng)雙坤鎮(zhèn)楚水鐵喜之迪泰方同濱邦先聰朝善非恒晉汝丹為晨乃秀巖辰洋然厚燦卓楊鈺蘭怡靈淇美琪亦晶舒菁真涵爽雅愛(ài)依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩(shī)璇琴素梅玲蕾艷紫珍麗儀夢(mèng)倩伊茜妍碧芬兒嵐婷菊妮媛蓮娟一',floor(1+400*rand()),1),substring('明國(guó)華建文平志偉東海強(qiáng)曉生光林小民永杰軍金健一忠洪江福祥中正振勇耀春大寧亮宇興寶少劍云學(xué)仁濤瑞飛鵬安亞澤世漢達(dá)衛(wèi)利勝敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長(zhǎng)嘉紅山賢陽(yáng)樂(lè)鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅(jiān)旭政傳康繼翔棟仲權(quán)奇禮楠煒友年震鑫雷兵萬(wàn)星駿倫紹麟雨行才希彥兆貴源有景升惠臣慧開(kāi)章潤(rùn)高佳虎根遠(yuǎn)力進(jìn)泉茂毅富博霖順信凡豪樹(shù)和恩向道川彬柏磊敬書(shū)鳴芳培全炳基冠暉京欣廷哲保秋君勁軒帆若連勛祖錫吉崇鈞田石奕發(fā)洲彪鋼運(yùn)伯滿(mǎn)庭申湘皓承梓雪孟其潮冰懷魯裕翰征謙航士堯標(biāo)潔城壽楓革純風(fēng)化逸騰岳銀鶴琳顯煥來(lái)心鳳睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日詠會(huì)久昕黎桂瑋燕可越彤雁孝憲萌穎藝夏桐月瑜沛誠(chéng)夫聲冬奎揚(yáng)雙坤鎮(zhèn)楚水鐵喜之迪泰方同濱邦先聰朝善非恒晉汝丹為晨乃秀巖辰洋然厚燦卓楊鈺蘭怡靈淇美琪亦晶舒菁真涵爽雅愛(ài)依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩(shī)璇琴素梅玲蕾艷紫珍麗儀夢(mèng)倩伊茜妍碧芬兒嵐婷菊妮媛蓮娟一',floor(1+400*rand()),1)),
ceiling(rand()*10)%2,
date(now()-interval (20+ceiling(rand()*100)%40) year),
concat('2015-', 1+ceiling(rand()*100)%12,'-',1+ceiling(rand()*100)%28))
ON DUPLICATE KEY UPDATE
updated_time=now();
END WHILE;
END $$
#call batchGenerateUsers();
并對(duì)其進(jìn)行適當(dāng)修改。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Linux系統(tǒng)徹底刪除Mysql的詳細(xì)教程
我們?cè)谥匦掳惭bMySQL、或更新MySQL版本時(shí),一定會(huì)遇到mysql數(shù)據(jù)殘留(臟數(shù)據(jù)),或組件沖突等問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)徹底刪除Mysql的詳細(xì)教程,需要的朋友可以參考下2023-02-02
MySQL基于SSL協(xié)議進(jìn)行主從復(fù)制的詳細(xì)操作教程
這篇文章主要介紹了MySQL基于SSL協(xié)議進(jìn)行主從復(fù)制的詳細(xì)操作教程,示例環(huán)境基于Linux系統(tǒng)以及OpenSSL客戶(hù)端,需要的朋友可以參考下2015-12-12
MyBatis攔截器實(shí)現(xiàn)分頁(yè)功能的實(shí)現(xiàn)方法
這篇文章主要介紹了MyBatis攔截器實(shí)現(xiàn)分頁(yè)功能的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文大家能夠?qū)崿F(xiàn)這樣的方法,需要的朋友可以參考下2017-10-10
mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情
這篇文章主要介紹了mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情,刪除數(shù)據(jù)表的時(shí)候,表的定義和表中所有的數(shù)據(jù)均會(huì)被刪除。因此,在進(jìn)行刪除操作前,最好對(duì)表中的數(shù)據(jù)做一個(gè)備份,以免造成無(wú)法挽回的后果2022-07-07
MySQL存儲(chǔ)過(guò)程的創(chuàng)建和使用示例詳解
文章介紹了MySQL存儲(chǔ)過(guò)程的概念、創(chuàng)建與刪除、調(diào)用、變量使用、參數(shù)、流程控制、管理和案例,存儲(chǔ)過(guò)程可以封裝SQL指令,提高執(zhí)行效率,但也有一定局限性,感興趣的朋友跟隨小編一起看看吧2025-02-02
Mysql中MyISAM和InnoDB的區(qū)別及說(shuō)明
這篇文章主要介紹了Mysql中MyISAM和InnoDB的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

