MySQL实现批量插入测试数据的方式总结

来源:脚本之家

2023-05-13 12:07:20

目录
设置允许创建函数产生随机字符串产生随机数字创建存储过程插入角色表插入用户表执行存储过程总结

前言

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


(资料图片仅供参考)

存储方式+函数Navicat的数据生成

准备了两张表 角色表:

id: 自增长role_name: 随机字符串, 不允许重复orders: 1-1000任意数字

用户表:

id: 自增长username: 随机字符串, 不允许重复password: 随机字符串, 允许重复role_id: 1-10w之间的任意数字

建表语句:

sql

复制代码

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;

使用函数生成

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

设置允许创建函数

查看 MySQL是否允许创建函数

sql

复制代码

SHOW VARIABLES LIKE "log_bin_trust_function_creators";

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

sql

复制代码

SET GLOBAL log_bin_trust_function_creators=1;

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

产生随机字符串

sql

复制代码

-- 随机产生字符串 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;

产生随机数字

sql

复制代码

-- 用于随机产生区间数字 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;

创建存储过程

插入角色表

sql

复制代码

-- 插入角色数据 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;

插入用户表

sql

复制代码

-- 插入用户数据 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;

执行存储过程

sql

复制代码

-- 执行存储过程,往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 的选择等

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

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

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

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

到此这篇关于MySQL实现批量插入测试数据的方式总结的文章就介绍到这了,更多相关MySQL插入数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

关键词:

疾控专家:提高全人群流感疫苗接种率尤为重要-环球新动态

来自中国疾控中心、各省市疾控中心以及中国香港、墨西哥、智利的中外专家与会。多位与会专家提醒,亟需通过[详细]
2023-05-25

天天热消息:球迷狂喜!天津队续约张庆鹏5年,同曦队将如何应对?

球迷狂喜!天津队续约张庆鹏5年,同曦队将如何应对?,杨鸣,张庆鹏,天津队,同曦队,张德贵,浙江队,刘维伟,男[详细]
2023-05-25

农村宅基地所有权应该归谁所有,可以转让吗-环球今热点

农村宅基地的所有权应该归所在村的村集体所有。我国法律就明确规定了,宅基地和自留地、自留山,属于集体所[详细]
2023-05-25

一天近2000套房降价 有人降价20万“只求一卖” 北京的二手房怎么还越卖越多? 焦点资讯

【一天近2000套房降价有人降价20万“只求一卖”北京的二手房怎么还越卖越多?】根据贝壳官网,2022年11月北[详细]
2023-05-25

教育部组织开展职业院校优秀教师代表2023年全国巡回宣讲活动 世界新资讯

为深入贯彻落实党的二十大精神,推动职业教育教师队伍建设,结合2023年全国职业教育活动周,教育部在职业教[详细]
2023-05-25

暴力激战之热血英雄(关于暴力激战之热血英雄介绍)

来为大家解答以上的问题。暴力激战之热血英雄,力激战之热血英雄介绍这个很多人还不知道,现在让我们一起来[详细]
2023-05-25

红瑞乐邦焦点访谈_红瑞乐邦 观速讯

1、红瑞乐邦高电位是不可以治病的。2、这个很重要的。本文就为大家分享到这里,希望小伙伴们会喜欢。[详细]
2023-05-25

GooglePixel7a智能手机耐用性测试

最近推出了新的GooglePixel7a智能手机,现在我们可以在JerryRigEverything的新视频中了解这款手机的耐用性[详细]
2023-05-25

征信花了没有逾期哪里可以借钱急用?试试这10个

征信花了没有逾期可以借钱急用的平台有:度小满、安信花、360借条、安逸花、小赢卡贷、宜享花、众安贷、天[详细]
2023-05-25

降尿酸最快的三种水果 降尿酸的水果有哪些

今天来聊聊关于降尿酸最快的三种水果,降尿酸的水果有哪些的文章,现在就为大家来简单介绍下降尿酸最快的三[详细]
2023-05-25
版权所有: 南极制冷网 All Rights Reserved
粤ICP备2022077823号-13
联系邮箱: 317 493 128@qq.com