1.1目的

在MySQL很多测试场景,需要人工生成一些测试数据来测试。本文提供一个构造MySQL大表存储过程,可以生成包含用户名,手机号码,出生日期等字段。也可以通过滤重来使得手机号码不重复,模拟现实场景。

1.2说明

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

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

如果想一次性生成不重复手机号码,可以考虑修改以下脚本,去掉uid,基于mobile列作为主键。

1.3代码

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

数据填充,这里插入500万条记录。跑起来需要很多时间,所以自己最好修改一下合适的数据量例如10万之类的。

call prc_gen_user(5000000);

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

新建和删除索引

alter table big_table add index index_mo_name(mobile,name);

drop index index_mo_name on big_table;

mysql 批量生成测试数据_mysql生成批量数据进行数据测试相关推荐

  1. c mysql批量插入优化_MySQL实现批量插入以优化性能的教程

    这篇文章主要介绍了MySQL实现批量插入以优化性能的教程,文中给出了运行时间来表示性能优化后的对比,需要的朋友可以参考下 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时 ...

  2. mysql多地备份_mysql简单批量备份多个库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #!/bin/bash #This script is batch backup for mysql: SQL_name='dbname1 dbname2 ...

  3. mysql excel 命令行_MySQL 命令行数据导出到 Excel

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil 将 MySQL 的数据导出 Excel, ...

  4. mysql 自动备份发送_MySQL自动备份数据并通过邮箱发送

    实验环境:腾讯云服务器 操作系统:CentOS 7 腾讯云.阿里云默认关闭了25端口,需要采用465端口通过smtp来发送邮件,由于个人博客一般数据量都不大,可以直接备份并通过邮件来把数据直接以附件形 ...

  5. mysql数据库检表_MYSQL数据库检查数据表和修复数据表

    数据库在运行中,会因为人为因素或一些不可抗力因素造成数据损坏.所以为了保护数据的安全和最小停机时间,我们需制定详细的备份/恢复计划,并定期对计划的有效性进行测试. 结合MySQL服务器的运行机制和所提 ...

  6. mysql显示表已存在_MySQL数据库与数据表的相关操作

    数据库相关操作: 显示数据库:show databases; 如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒. 创建数据库: Query OK表示创建成功,1行受到影响,处理时间 ...

  7. mysql数据库版本不同_MySQL不同版本数据同步

    1.环境准备: 系统环境:CentOS Linux release 7.7.1908 (Core) MySQL环境: 172.16.6.140: Ver 5.0.96-community-log fo ...

  8. mysql 交换 表分区_mysql分区表分区数据和普通表交换

    前言 在介绍交换分区之前,我们先了解一下 mysql 分区. 数据库的分区有两种:水平分区和垂直分区.而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区.水平分区即:以行为单位对表进行分区.比 ...

  9. mysql数据库表更新_MySQL更新表数据

    更新数据是使用数据库时最重要的任务之一. 在本教程中,您将学习如何使用MySQL UPDATE语句来更新表中的数据. 1. MySQL UPDATE语句简介 我们使用UPDATE语句来更新表中的现有数 ...

最新文章

  1. 全球及中国磁性分离滑轮行业竞争战略及未来产销需求预测报告2022版
  2. go给Linux安装mysql_在Linux上安装Go语言开发包
  3. mysql循环队列_数据结构:循环队列
  4. [剑指offer]面试题34:丑数
  5. mysql dump工具升级_MySQL数据库升级
  6. oracle游标多线程,多线程jdbc游标分页查询原理 oracle和mysql分页
  7. 深入学习golang—channel
  8. 使用Rancher搭建Kubernetes集群
  9. excel转word后表格超出页面_妙招!Word和Execl“联姻”实现数据高效处理!
  10. himall微信支付
  11. 带你学微信小程序开发
  12. 删除ubuntu自带软件 及 WPS 安装(转)WPS字体已备份
  13. B站 马士兵Python 入门基础版 - 课程笔记
  14. buildroot 交叉编译 剥离arm架构的二进制文件
  15. 咸鱼软件应用—ubuntu切换中文
  16. android开发——分秒计时器(可 开始/暂停/继续/停止)
  17. 固体理论习题演练双时格林函数的运动方程
  18. 测试4年裸辞失业,面试17k的测试岗被按在地上摩擦,结局让我崩溃大哭...
  19. 三维引擎基础概述(Direct3D、OpenGL、UE、U3D、threejs等)
  20. 分享 7 个 AI 优质开源项目!文本生成、自动化数据搜集...

热门文章

  1. python爬虫篇1——爬取中英文论文文献数据
  2. AccessDenied You have no right to access this object because of bucket acl.
  3. 最新!2023年测绘资质 大地测量乙级申请标准
  4. cv2.VideoWriter生成avi文件无法打开
  5. 最新kali之pixiewps
  6. 磁盘阵列 服务器直连,硬盘连接方式介绍/直连硬盘(第一种方式)
  7. (跨境电商模式)境外商品进口的4种方式
  8. app显示服务器繁忙是什么原因,联动云app服务器繁忙
  9. [思考]两个云计算平台的葬礼
  10. LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化