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

相关文章

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

PyQt5+Python-docx实现一键生成测试报告

《PyQt5+Python-docx实现一键生成测试报告》作为一名测试工程师,你是否经历过手动填写测试报告的痛苦,本文将用Python的PyQt5和python-docx库,打造一款测试报告一键生成工... 目录引言工具功能亮点工具设计思路1. 界面设计:PyQt5实现数据输入2. 文档生成:python-

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J