MySQL批量随机生成name、TEL、idNumber

2023-10-17 22:10

本文主要是介绍MySQL批量随机生成name、TEL、idNumber,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        通过创建存储函数得到三种随机数据,调用存储过程中使用函数得到批量数据插入表中,再通过子查询嵌套group by简单去重。


一、函数

随机姓名生成函数rand_name()

声明两变量xing、ming保存部分人使用的名字库,通过随机函数rand()取得xing、ming中的各一字,如果特判rand()再决定是否是单字或者双字。

        可自行对xing(姓)、ming(名)进行增删提高数据真实性。

-- 开启允许创建函数
set global log_bin_trust_function_creators = 1;
-- 创建随机生成姓名函数 rand_name
drop function if exists rand_name;
DELIMITER $$
CREATE FUNCTION rand_name() RETURNS varchar(16)
BEGINDECLARE xing VARCHAR (2056) DEFAULT '赵黄钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林刁锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';DECLARE ming VARCHAR (2056) DEFAULT '海寻朋义洋彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩嘉懿煜城懿轩烨伟苑博伟泽熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖哲瀚鑫鹏致远俊驰雨泽烨磊晟睿天佑文华灿嘉慕坚秉建明金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华靖琪明诚高格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘曼文乐菱痴珊恨玉惜文香寒新柔语蓉海安昊修洁黎昕远航旭尧鸿涛伟祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽睿渊楷瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊瑶冰露尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡春竹修杰伟诚建辉晋鹏天磊绍辉泽洋真晓亦向珊慕灵以蕊寻雁映易雪柳孤岚笑霜海云凝天沛珊寒云冰旋宛儿绿真盼儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代云梦曼幼翠友巧听寒梦柏醉易访旋亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇靖雁寻春恨山从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉紫山千琴恨天傲芙盼山怀蝶冰兰山柏翠萱乐丹翠柔谷山之博鸿朗华奥夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元霜怜梦紫寒妙彤曼易南莲紫翠雨寒易烟如萱';DECLARE I_xing INT DEFAULT LENGTH(xing) / 3;DECLARE I_ming INT DEFAULT LENGTH(ming) / 3;DECLARE return_str VARCHAR (2056) DEFAULT '';SET return_str = CONCAT(return_str,SUBSTRING(xing, FLOOR(1 + RAND() * I_xing), 1));SET return_str = CONCAT(return_str,SUBSTRING(ming, FLOOR(1 + RAND() * I_ming), 1));IF RAND() > 0.400THEN SET return_str = CONCAT(return_str,SUBSTRING(ming, FLOOR(1 + RAND() * I_ming), 1));END IF;RETURN return_str;
END$$
DELIMITER ;
-- 调用函数
select rand_name();

随机TEL生成函数generatePhone()

与上个函数同理,预先定义好了前3个数字,后面8个数字随机取得。

        可自行对head进行增删提高数据真实性。

-- 创建随机生成手机号函数 generatePhone
drop function if exists generatePhone;
delimiter $$
CREATE  FUNCTION `generatePhone`() RETURNS char(11) CHARSET utf8DETERMINISTIC
BEGINDECLARE head VARCHAR(200) DEFAULT '134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188,130,131,132,145,155,156,185,186,199,133,153,180,181,189';DECLARE content CHAR(10) DEFAULT '0123456789';DECLARE phone CHAR(11) DEFAULT substring(head, 1+(FLOOR(1 + (RAND() * 3))*4), 3);DECLARE i int DEFAULT 1;DECLARE len int DEFAULT LENGTH(content);WHILE i<9 DOSET i=i+1;SET phone = CONCAT(phone, substring(content, floor(1 + RAND() * len), 1));END WHILE;RETURN phone;
end$$
delimiter ;
-- 查询随机手机号
select generatePhone();

随机idNumber生成函数genIdNumber()

同理,实现定义好三部分,,后四位随机生成。

        可自行对head、years、months进行增删提高数据真实性。

-- idNumber随机生成
drop function if exists genIdNumber;
DELIMITER $$
DROP FUNCTION IF EXISTS genIdNumber$$
CREATE  FUNCTION `genIdNumber`() RETURNS char(18) CHARSET utf8DETERMINISTIC
BEGINDECLARE head VARCHAR(100) DEFAULT '000000,321102,321001,320112,320021,360735,361145,360302,360907,340323,340829,260504';DECLARE years VARCHAR(100) DEFAULT '0000,1995,1993,1990,1999,2002,2001,1998,1985,1977,1989,1979';DECLARE months VARCHAR(100) DEFAULT '0000,1201,1203,0903,1111,0201,0305,1215,0604,0504,0319,0707';DECLARE content CHAR(10) DEFAULT '0123456789';DECLARE headd CHAR(11) DEFAULT substring(head, 1+(FLOOR(1 + (RAND() * 4))*7), 6);DECLARE yeard CHAR(11) DEFAULT substring(years, 1+(FLOOR(1 + (RAND() * 4))*5), 4);DECLARE monthd CHAR(11) DEFAULT substring(months, 1+(FLOOR(1 + (RAND() * 4))*5), 4);DECLARE idcard CHAR(18) DEFAULT CONCAT(headd,yeard,monthd);DECLARE i int DEFAULT 1;DECLARE len int DEFAULT LENGTH(content);WHILE i<5 DOSET i=i+1;SET idcard = CONCAT(idcard, substring(content, floor(1 + RAND() * len), 1));END WHILE;RETURN idcard;
END $$
DELIMITER ;
-- 调用函数
select genIdNumber();


二、测试与去重 

创建一个测试表,4个字段,`id`自增,`name`姓名,`phone`电话号码,`idnumber`.

-- 创建表进行测试
drop table if exists study_user;
create table study_user (`id` int not null auto_increment ,`name` varchar(16) default null,`phone` char(11),`idnumber` char(18),primary key (id)
);

创建批量生成数据的存储过程insert_user(in num int)

通过循环传入的参数num,来在insert语句中调用3个存储函数来得到批量随机组合。(小概率随机重复)

-- 创建批量生成表数据存储过程
drop procedure insert_user;
delimiter $$
create PROCEDURE insert_user(in num int)
begin-- 记录循环次数declare i int default 0;-- 关闭自动提交set autocommit = 0;-- 循环insertwhile i < num doinsert into study_user(name, phone, idnumber) values(rand_name(), generatePhone(), genIdNumber());set i = i + 1;end while;commit;end$$
delimiter ;

执行存储过程,并通过嵌套三层子查询group by简单去重。

-- 执行存储过程
call insert_user(100); #数据量
-- 数据去重,取唯一组数据
select  * from(select * from (select * from study_user group by phone) as temp_data group by idnumber) as temp_data02 group by name;
-- 查看数据
select * from study_user;

获得数据结果,部分如下。 

这篇关于MySQL批量随机生成name、TEL、idNumber的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228271

相关文章

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一