MySQL批量插入测试数据的2种方式

news2024/9/27 5:56:45

在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者学习验证某一知识点经常需要一些测试数据, 这个时候如果手敲的话, 十行二十行还好, 多了就很死亡了, 接下来介绍两种常用的MySQL测试数据批量生成方式:

  • 存储方式+函数

  • Navicat的数据生成

准备了两张表。

角色表:

  • id: 自增长

  • role_name: 随机字符串, 不允许重复

  • orders: 1-1000任意数字

用户表:

  • id: 自增长

  • username: 随机字符串, 不允许重复

  • password: 随机字符串, 允许重复

  • role_id: 1-10w之间的任意数字

建表语句:


CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) DEFAULT NULL COMMENT '用户名',

`role_id` int(11) DEFAULT NULL COMMENT '角色id',

`password` varchar(255) DEFAULT NULL COMMENT '密码',

`salt` varchar(255) DEFAULT NULL COMMENT '盐',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `role` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`role_name` varchar(255) DEFAULT NULL COMMENT '角色名',

`orders` int(11) DEFAULT NULL COMMENT '排序权重\r\n',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;
使用函数生成

通过存储过程快速插入, 通过函数保证数据不重复。

01 设置允许创建函数

查看 MySQL是否允许创建函数:

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

结果如图所示, 我们使用以下命令将创建函数功能打开(global-所有session都生效):

SET GLOBAL log_bin_trust_function_creators=1; 

这个时候再一次查询就会显示已打开:

产生随机字符串:


-- 随机产生字符串

DELIMITER $$

CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)

BEGIN

DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';

DECLARE return_str VARCHAR(255) DEFAULT '';

DECLARE i INT DEFAULT 0;

WHILE i < n DO

SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));

SET i = i + 1;

END WHILE;

RETURN return_str;

END $$


-- 假如要删除

-- drop function rand_string;

产生随机数字:


-- 用于随机产生区间数字

DELIMITER $$

CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)

BEGIN

DECLARE i INT DEFAULT 0;

SET i = FLOOR(from_num +RAND()*(to_num -from_num+1));

RETURN i;

END$$


-- 假如要删除

-- drop function rand_num;
02 创建存储过程

插入角色表:

 

-- 插入角色数据

DELIMITER $$

CREATE PROCEDURE insert_role(max_num INT)

BEGIN

DECLARE i INT DEFAULT 0;

SET autocommit = 0;

REPEAT

SET i = i + 1;

INSERT INTO role ( role_name,orders ) VALUES (rand_string(8),rand_num(1,5000));

UNTIL i = max_num

END REPEAT;

COMMIT;

END$$


-- 删除

-- DELIMITER ;

-- drop PROCEDURE insert_role;

插入用户表:​​​​​​​

 

-- 插入用户数据

DELIMITER $$

CREATE PROCEDURE insert_user(START INT, max_num INT)

BEGIN

DECLARE i INT DEFAULT 0;

SET autocommit = 0;

REPEAT

SET i = i + 1;

INSERT INTO user (username, role_id, password, salt ) VALUES (rand_string(8) ,rand_num(1,100000), rand_string(10), rand_string(10));

UNTIL i = max_num

END REPEAT;

COMMIT;

END$$


-- 删除

-- DELIMITER ;

-- drop PROCEDURE insert_user;
03 执行存储过程​​​​​​​

-- 执行存储过程,往dept表添加10万条数据

CALL insert_role(100000);


-- 执行存储过程,往emp表添加100万条数据,编号从100000开始

CALL insert_user(100000,1100000);
总结

执行用时10w数据差不多半分钟, 100w数据超过了20分钟, 同时user的存储还卡死很久。

最后都成功新增, 但是自动递增值和行数不一致, 这个我也不知道因为啥。

数据展示:

  • role表

  • user表

使用Navicat自带的数据生成

接下来我们使用Navicat的数据生成:

直接下一步,然后选择对应的两张表生成行数和对应的生成规则,基于之前的执行速度,这次 role生成1w数据,user生成10w数据。

对于字符串类型的字段,我们可以设置他的随机数据生成器,根据需要进行选择。

例如角色名称,选择了职位名称,还可以进行是否包含 null的选择等。

但是如果是姓名,那么就会让你选择是否唯一:

数字的话会让你选择范围、默认值等:

等确定好了, 我们就可以点击右下角进行生成随机测试数据。

通过结果可以看到生成十一万测试数据一共用时十一秒, 比第一种方法速度快很多,推荐使用。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

投屏软件哪个好用又免费?4款投屏软件,远程且兼容多平台!

投屏软件哪个好用又免费&#xff1f;不论是在工作中做演示、在家中娱乐观影&#xff0c;还是在学习中进行远程教学&#xff0c;投屏软件都能让你的设备实现多屏互动&#xff0c;让体验更为流畅和便捷。今天&#xff0c;我就为大家推荐几款热门的投屏软件。 1. 乐播投屏&#xf…

第二证券:白酒股,全线飘红

A股首要指数走势分化&#xff0c;到午间收盘&#xff0c;沪指跌0.45%&#xff0c;深成指涨1.03%&#xff0c;创业板指涨0.8%。近4000只个股上涨&#xff0c;两市半日成交3854亿元&#xff0c;较上日同期放量629亿元。 盘面上&#xff0c;光伏设备板块冲高&#xff0c;快可电子…

【区间dp、字符串处理】P4290 [HAOI2008] 玩具取名 题解

前言 毒瘤的字符串杂题 题意 给定 A , B , C , D ( A , B , C , D ≤ 16 ) A,B,C,D(A,B,C,D \leq 16) A,B,C,D(A,B,C,D≤16) 四个数&#xff0c;依次代表 W I N G 四个字母分别能用哪些含有 W I N G 四个字母且长度为 2 2 2 的字符串表示&#xff0c;如以下输入样例&#…

为什么选择GHA文章作为谷歌seo的首选?

选择GHA的文章作为谷歌SEO的首选主要是因为其内容质量和优化策略&#xff0c;GHA专注于高质量的原创内容&#xff0c;这些内容不仅是原创的&#xff0c;还包括了超过3000字的详细信息&#xff0c;通过深入的关键词调研和布局&#xff0c;确保每篇文章都能在发布后迅速被谷歌收录…

JavaScript学习文档(11):Window对象、本地存储、数组中一些方法、学生就业统计表案例

目录 一、Window对象 1、BOM(浏览器对象模型) 2、定时器-延时函数 3、 JS执行机制 &#xff08;1&#xff09;同步任务&#xff1a; &#xff08;2&#xff09;异步任务&#xff1a; 4、location对象 &#xff08;1&#xff09;5秒钟后跳转页面 5、navigator对象 6、…

【uniapp/uview1.x】u-collapse 高度随内容自适应

当 u-collapse-items 中的内容为动态的时候&#xff0c;会发生这种情况&#xff1a; 在 uview 官网中有一个方法可以解决&#xff1a; 具体方法&#xff1a; 在 u-collapse 标签中配置 ref"collapse"&#xff1a; <u-collapse ref"collapse" :item-…

python脚本开头怎么写

在python开发的过程中&#xff0c;脚本开头非常重要。 第一行&#xff1a;告诉操作系统python装在哪里&#xff08;是通过env中查询&#xff0c;然后再调到对应的解析器完成运行&#xff09;。 第二行&#xff1a;是声明文件的编码格式以utf-8。 其他则为这个文件信息&#…

LeetCode49题的反思

Java里的List&#xff08;集合&#xff09;、Array&#xff08;数组&#xff09;、Map&#xff08;字典&#xff09; List<String> L new ArrayList<>();(List是接口&#xff0c;ArrayList是接口的实现类) int[] Y new int[2];(Java命名类型&#xff0c;int[]是个…

如何使用 TortoiseGit(小乌龟)进行分支创建、切换与合并以及解决冲突

&#x1f600;前言 本文将详细介绍如何使用 TortoiseGit&#xff08;小乌龟&#xff09;进行分支创建、切换与合并以及解决冲突等操作。TortoiseGit 是一个广泛使用的 Windows 图形化 Git 客户端&#xff0c;其友好的用户界面和丰富的功能使得 Git 操作变得更加直观和便捷。 &a…

web尝试---信箱

功能 写信&#xff08;增加&#xff09;读信&#xff08;显示所有信件&#xff09; 目录结构 数据库设计 刚开始设计了主键为id&#xff0c;但是后来不想用id这个属性了&#xff0c;但是代码写完了很麻烦不想改了。 感觉我这个id属性设置的简直多余&#xff01;&#xff01…

传知代码-MSA+抑郁症模型总结(三)(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 热门研究领域&#xff1a;情感计算的横向发展 随着社交网络的不断发展&#xff0c;近年来出现了多模态数据的热潮。越来越多的用户采用媒体形式的组合&#xff08;例如文本加图像、文本加歌曲、文本加视频等&…

TypeScript(TS) 自定义绑定快捷键

有很多软件中都可以让用户自定义快捷键 如微信中的快捷键&#xff1a; 思路&#xff1a; 1. 将快捷键分为两部分&#xff1a; a. 主要的键 shift, ctrl, alt, command&#xff1b; b. 非主要的键 字母键、数字键等&#xff1b; 2. 键盘按下事件&#xff1a;比较按键和绑定…

Echarts关系图特效实现

全屏展示 鼠标经过高亮展示 点击其他节点&#xff0c;加载其他节点数据 这个主要利用了echarts的关系图配置。因为需要将相同类型的数据放一起&#xff0c;所以不能实用引力图&#xff0c;引力图虽然效果比较好&#xff0c;而且有动画&#xff0c;但是无法根据同一类型的东西在…

快递时效新视角:‌批量分析派件与签收策略

在快递行业日益竞争的今天&#xff0c;‌时效成为了衡量快递服务质量的重要指标之一。‌对于商家和消费者而言&#xff0c;‌了解快递从到达最后站点到派件以及签收的时效&#xff0c;‌对于优化物流流程、‌提升客户体验具有重要意义。‌本文将介绍如何利用快递批量查询高手软…

17-18 - make 中的路径搜索

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 常用的源码管理方式1.1 特殊的预定义变量 VPATH&#xff08;全大写&#xff09;1.2 make 对于 VPATH 值的处理方式1.3 vpath&#xff08;全小写&#xff09; 2. 常见问题2.1 问题 12.2 问题 2 1. 常用的源码管理方式 项目中的 …

【化学方程式配平 / 3】

题目 代码 #include <bits/stdc.h> using namespace std; const double eps 1e-8; unordered_map<string, int> e; int eidx, midx; //eidx 元素数&#xff0c; midx 物质数 double matrix[45][45]; int q; bool check_alpha(char c) {if(c > a && c …

这一届单机游戏玩家,都在用云电脑玩《黑神话悟空》

文 | 智能相对论 作者 | 陈泊丞 周五下班&#xff0c;上号玩游戏&#xff0c;突然发现&#xff0c;之前因为电脑配置跟不上&#xff0c;“A”了大半年的游戏亲友竟然在线&#xff1f;&#xff01; “哟&#xff0c;终于舍得配电脑了&#xff1f;&#xff01;”我发消息问道。…

RedisTemplate集成+封装RedisUtil

文章目录 1.项目搭建1.创建一个redis模块2.调整pom.xml&#xff0c;使其成为单独的模块1.sun-common-redis的pom.xml 取消parent2.sun-common的pom.xml 取消对redis模块的管理3.sun-frame的pom.xml 增加对redis模块的管理4.关于只在modules中配置子模块&#xff0c;但是子模块没…

每日OJ_牛客_数据库连接池(简单模拟)

目录 牛客_数据库连接池&#xff08;简单模拟&#xff09; 解析代码 牛客_数据库连接池&#xff08;简单模拟&#xff09; 数据库连接池__牛客网 解析代码 题目解析&#xff1a; 服务器后台访问数据库时&#xff0c;需要先连上数据库&#xff0c;而为了连上数据库&#xf…

数盟IOS端可信ID

一、基本情况介绍 数盟IOS端可信ID介绍页: 数字联盟 数盟号称是还原出原生的IDFA, 但是苹果官网这么介绍&#xff1a; 用户开启跟踪允许跟踪后&#xff0c;APP才可以请求获取IDFA&#xff0c;且用户交互界面允许后&#xff0c;APP才能获取到IDFA. 官网给出的基本架构&#xf…