怎么批量生成MySQL不重复手机号的示例

54次阅读
没有评论

共计 4771 个字符,预计需要花费 12 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍怎么批量生成 MySQL 不重复手机号的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、生成脚本

生成说明:

以下使用存储过程批量生成包含用户名,手机号,出生日期等字段大表。

该存储过程使用基于 uid 作为主键,因此会生成少量重复手机号码,后面有滤重 SQL 脚本。

如果想一次性生成不重复手机号码,可以考虑修改以下脚本,去掉 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(
  赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金
  魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任
  袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康
  伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈
  宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛
  林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗
  丁宣贲邓郁单杭洪包诸左石崔吉钮龚 ,
 floor(1 + 190 * rand()),
 1),
 substring(
  明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
  正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
  敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
  贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
  康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
  源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
  恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
  勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
  裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
  延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
  宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
  先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
  晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
  玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一 ,
 floor(1 + 400 * rand()),
 1),
 substring(
  明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
  正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
  敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
  贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
  康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
  源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
  恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
  勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
  裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
  延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
  宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
  先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
  晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
  玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一 ,
 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

二、数据填充

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 语句

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);

四、其它

本文参考了以下代码,下面代码实现是 MySQL 批量造用户数据,姓名 / 手机号 / 生日 / 密码

DROP PROCEDURE IF EXISTS batchGenerateUsers;

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( 赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚 ,floor(1+190*rand()),1),substring(明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一 ,floor(1+400*rand()),1),substring(明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一 ,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();

并对其进行适当修改。

以上是“怎么批量生成 MySQL 不重复手机号的示例”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计4771字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)