暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL 产生大量数据的过程

163

做实验时候需要一个表,有意思的表,数量非常可观的表做MYSQL的实验

比如说做加锁测试, 死锁测试,源码跟踪,以及JMETER压力测试的对象

来一张个人信息表, 身份证,姓氏,名字,手机,性别,出生日期,年龄,最高学历,收入!

CREATE TABLE `personal_identity_info` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `identity_number` char(20COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '身份证号码',
  `surname` varchar(3COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓氏',
  `name` varchar(15COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
  `mobile` varchar(45COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '手机',
  `sex` char(1COLLATE utf8mb4_general_ci NOT NULL COMMENT '男;女',
  `birthday` datetime NOT NULL COMMENT '出生日期',
  `age` tinyint unsigned NOT NULL DEFAULT '0',
  `top_education` varchar(2COLLATE utf8mb4_general_ci NOT NULL DEFAULT '文盲' COMMENT '学历:0 文盲;1 小学,2初中,3 高中,4 大学,5 硕士,6 博士',
  `income_year` int unsigned DEFAULT '0' COMMENT '收入 元',
  `create_time` datetime(6DEFAULT CURRENT_TIMESTAMP(6),
  `update_time` datetime(6DEFAULT CURRENT_TIMESTAMP(6ON UPDATE CURRENT_TIMESTAMP(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `identity_number_unique` (`identity_number`),
  UNIQUE KEY `mobile_unique` (`mobile`),
  KEY `idx_personal_identity_info_name` (`name`),
  KEY `idx_personal_identity_info_top_education` (`top_education`),
  KEY `idx_personal_identity_info_create_time` (`create_time`),
  KEY `idx_personal_identity_info_mobile` (`mobile`)
ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='个人身份信息表';

还有唯一索引 4个普通索引


然后写个存储过程 想生成多少数据,就生成多少数据

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `prc_gen_user`(l_cnt int)
BEGIN
  DECLARE x INT DEFAULT 0;

   WHILE x < l_cnt
   DO
      SET x = x + 1;

insert into `personal_identity_info` (
  `identity_number`,
  `surname`,
  `name` ,
  `mobile` ,
  `sex` ,
  `birthday`,
  `age`,
  `top_education`,
  `income_year`)   
select  
  concat(floor(1 + rand(1) * (32)) ,right(left(trim(cast(rand() as char(50))),20),16)) as idcard,
  substring(replace('赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金
             魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任
             袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康
             伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈
             宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛
             林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗
             丁宣贲邓郁单杭洪包诸左石崔吉钮龚'
,' ',''), floor(1 + 190 * rand()),1as "姓氏"  ,

    concat(  
             substring(replace(   
                         '明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
                          正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
                          敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
                          贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
                          康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
                          源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
                          恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
                          勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
                          裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
                          延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
                          宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
                          先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
                          晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
                          玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一'
,' ',''), floor(1 + 400 * rand()), 1),
              substring(replace
                         '明国华建文平志伟东海强晓生光林小民永杰军金健一忠洪江福祥中
                          正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜
                          敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山
                          贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿森超坚旭政传
                          康继翔栋仲权奇礼楠炜友年震鑫雷兵万星骏伦绍麟雨行才希彦兆贵
                          源有景升惠臣慧开章润高佳虎根远力进泉茂毅富博霖顺信凡豪树和
                          恩向道川彬柏磊敬书鸣芳培全炳基冠晖京欣廷哲保秋君劲轩帆若连
                          勋祖锡吉崇钧田石奕发洲彪钢运伯满庭申湘皓承梓雪孟其潮冰怀鲁
                          裕翰征谦航士尧标洁城寿枫革纯风化逸腾岳银鹤琳显焕来心凤睿勤
                          延凌昊西羽百捷定琦圣佩麒虹如靖日咏会久昕黎桂玮燕可越彤雁孝
                          宪萌颖艺夏桐月瑜沛诚夫声冬奎扬双坤镇楚水铁喜之迪泰方同滨邦
                          先聪朝善非恒晋汝丹为晨乃秀岩辰洋然厚灿卓杨钰兰怡灵淇美琪亦
                          晶舒菁真涵爽雅爱依静棋宜男蔚芝菲露娜珊雯淑曼萍珠诗璇琴素梅
                          玲蕾艳紫珍丽仪梦倩伊茜妍碧芬儿岚婷菊妮媛莲娟一'

                          ,' ',''),floor(1 + 400 * rand()),1),                          
              substring(replace(  '边君军俊骏帅柔善文温雯娜基帝德恩师',' ',''), floor(1 + 17 * rand()),1
              )  as "名字" ,
                concat('1',substring(cast(3 + (rand() * 10) % 7 as char(50)), 11),right(left(trim(cast(rand() as char(50))), 11), 9)) as mobile,
                (case when round(rand()*10)%2=0 then '女' else '男' end ) as sex,
                date(now()- interval (20 + ceiling(rand() * 100) % 40yearas birthday,
                floor(1 + rand() * (150)) as age,
                (case when floor(0 + rand() * (7))=0 then '文盲'  
                      when floor(0 + rand() * (7))=1 then '小学'
                      when floor(0 + rand() * (7))=2 then '初中'
                      when floor(0 + rand() * (7))=3 then '高中'
                      when floor(0 + rand() * (7))=4 then '大学'
                      when floor(0 + rand() * (7))=5 then '硕士' 
                      when floor(0 + rand() * (7))=6 then '博士'
                      else '文盲'
                      endas top_education,
                 floor(1000 + rand() * (90000))  as income_year                   
ON DUPLICATE KEY UPDATE identity_number = concat(floor(1 + rand(1) * (32)) ,right(left(trim(cast(rand() AS char(50))),20),16)) ,
                        mobile =   concat('1',substring(cast(3 + (rand() * 10) % 7 AS char(50)), 11),right(left(trim(cast(rand() AS char(50))), 11), 9)) ;             
   END WHILE;
END$$
DELIMITER ;

最后有重复值就更新,保证唯一性!

文章转载自海鲨数据库架构师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论