首页 > 数据库 >小白学习MySQL - 随机插入测试数据的工具

小白学习MySQL - 随机插入测试数据的工具

时间:2023-06-19 11:05:07浏览次数:79  
标签:random 测试数据 field 小白 samples MySQL table data


我们日常做一些MySQL测试的时候,经常要造数据,通常就写个循环插入数据的存储过程。前两天碰巧看文章说,mysql_random_data_load程序能向MySQL随机插入大量数据,于是了解一下。

mysql_random_data_load是个开源的项目,github路径如下,

https://github.com/Percona-Lab/mysql_random_data_load/releases

从信息来看,作者是一个阿根廷的程序员,

小白学习MySQL - 随机插入测试数据的工具_java

0.1.12是最新的版本,

小白学习MySQL - 随机插入测试数据的工具_数据库_02

版本信息如下,

0.1.10

  • Fixed argument validations
  • Fixed ~/.my.cnf loading

0.1.10

  • Fixed connection parameters for MySQL 5.7 (set driver's AllowNativePasswords: true)

0.1.9

  • Added support for bunary and varbinary columns
  • By default, read connection params from ${HOME}/.my.cnf

0.1.8

  • Fixed error for triggers created with MySQL 5.6
  • Added Travis-CI
  • Code clean up

0.1.7

  • Support for MySQL 8.0
  • Added --print parameter
  • Added --version parameter
  • Removed qps parameter

0.1.6

  • Improved generation speed (up to 50% faster)
  • Improved support for TokuDB (Thanks Agustin Gallego)
  • Code refactored
  • Improved debug logging
  • Added Query Per Seconds support (experimental)

0.1.5

  • Fixed handling of NULL collation for index parser

0.1.4

  • Fixed handling of time columns
  • Improved support of GENERATED columns

0.1.3

  • Fixed handling of nulls

0.1.2

  • New table parser able to retrieve all the information for fields, indexes and foreign keys constraints.
  • Support for foreign keys constraints
  • Added some tests

0.1.1

  • Fixed random data generation

0.1.0

  • Initial version

可以下载源代码了解他的实现,Go语言写的,

小白学习MySQL - 随机插入测试数据的工具_数据库_03

看下这个文件,README.md,基本就可以知道怎么用了,作者提到了他为什么写这个程序,平时写了很多这种构造随机数的程序,不想再造轮子了,写个通用的,

Many times in my job I need to generate random data for a specific table in order to reproduce an issue.

After writing many random generators for every table, I decided to write a random data generator, able to get the table structure and generate random data for it.

 
Plase take into consideration that this is the first version and it doesn't support all field types yet!  

他支持如下这些数据类型,

小白学习MySQL - 随机插入测试数据的工具_数据库_04

字符串类型的构造原则如下,根据长度不同,给出不同的规则,

How strings are generated

  • If field size < 10 the program generates a random "first name"
  • If the field size > 10 and < 30 the program generates a random "full name"
  • If the field size > 30 the program generates a "lorem ipsum" paragraph having up to 100 chars.

如果字段允许NULL,随机产生10%的空值,

The program can detect if a field accepts NULLs and if it does, it will generate NULLs ramdomly (~ 10 % of the values).

还支持外键模拟,

Foreign keys support

If a field has Foreign Keys constraints, random-data-load will get up to --max-fk-samples random samples from the referenced tables in order to insert valid values for the field.  

The number of samples to get follows this rules:  
1. Get the aproximate number of rows in the referenced table using the rows field in:

EXPLAIN SELECT COUNT(*) FROM <referenced schema>.<referenced table>
1.1 If the number of rows is less than max-fk-samples, all rows are retrieved from the referenced table using this query:
SELECT <referenced field> FROM <referenced schema>.<referenced table>
1.2 If the number of rows is greater than max-fk-samples, samples are retrieved from the referenced table using this query:  
SELECT <referenced field> FROM <referenced schema>.<referenced table> WHERE RAND() <= <fk-samples-factor> LIMIT <max-fk-samples>

mysql_random_data_load支持以下参数,

小白学习MySQL - 随机插入测试数据的工具_python_05

测试一下,创建一张表,

create table test(id int, c1 varchar(1));

执行指令,6秒插入10万数据,

-bash-4.2$ ./mysql_random_data_load -h127.0.0.1 -u用户名 -p密码 --max-threads=2(线程数) 数据库名称 表名 100000(插入数据量)
INFO[2021-12-17T14:31:41+08:00] Starting
   6s [====================================================================] 100%
   6s [====================================================================] 100%

看下效果,id就只有2条相同的,

小白学习MySQL - 随机插入测试数据的工具_java_06

c1列有20个值,数据比较分散,

小白学习MySQL - 随机插入测试数据的工具_java_07

还是能满足基本的测试数据要求的,操作简单,基本的数据类型都可以支持,空值、外键这些特殊的场景,也都能支持,不错的开源工具,


标签:random,测试数据,field,小白,samples,MySQL,table,data
From: https://blog.51cto.com/u_13950417/6511654

相关文章

  • mysql
    创建库createdatabasedb1查看库showdatabase切换当前库usedb1删除库dropdatabasedb1 创建表createtablestudents清空表deletefrom表名增语法:insertinto表名(列1,列2...)values(值,值...)Eg:insertintostudents(name,sex,age)values(‘zm’,’male’,1......
  • mysql 存储过程实例
    mysql存储过程实例1. 存储过程-递归查询数据字典树数据CREATEDEFINER=`lihongyuan`@`%`PROCEDURE`GetDataDictionaryTree`(intkeyvarchar(200))BEGINWITHRECURSIVEcteAS(SELECTid,name,ParentId,`Order`FROMlbd_app......
  • MySQL8(glibc2.28)二进制安装
    操作系统:centos7.9安装数据库:mysql-8.0.33-linux-glibc2.28一、升级gcc(传送阵:升级gcc)1、添加mysql8依赖库软连接mv/lib64/libstdc++.so.6/lib64/libstdc++.so.6_oldln-s/usr/local/gcc/lib64/libstdc++.so.6/lib64/libstdc++.so.62、查看GLIBC_2.28是否更新成功stri......
  • 73.Mysql密码验证组件
    Mysql在设置用户密码时有一个关于密码验证组件,该组件的功能就是提高用户设置密码时的安全性。1.安装和卸载mysql>INSTALLCOMPONENT'file://component_validate_password';mysql>UNINSTALLCOMPONENT'file://component_validate_password';2.查看mysql>SHOWVARIABLE......
  • DataX在Windows上实现Mysql到Mysql同步数据以及配置多个job/多个表同步定时执行bat
    场景DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步:DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步_sqlserver数据同步工具_霸道流DataX-在Windows上实现postgresql同步数据到mysql:DataX-在Windows上实现postgres......
  • 【mysql】1378. 使用唯一标识码替换员工ID
    题目:Employees表:±--------------±--------+|ColumnName|Type|±--------------±--------+|id|int||name|varchar|±--------------±--------+id是这张表的主键。这张表的每一行分别代表了某公司其中一位员工的名字和ID。EmployeeUNI表:±--------......
  • 必知必会:MySQL
    复制表结构和其数据:createtabletable_name_newasselect*fromtable_name_old表结构相同,复制表数据:insertintotable_name_newselect*fromtable_name_old表结构不同,复制表数据:insertintotable_name_new(column1,column2...)selectcolumn1,column2........
  • MySQL 优化
    SQL优化是提高MySQL数据库性能和查询效率的过程。下面是一些常见的SQL优化技巧:优化表结构:合理的表结构设计有助于提高性能。特别是,列是否具有正确的数据类型,每个表是否具有符合业务需求的列?例如,执行频繁更新的业务通常表比较多,列很少,而分析大量数据的业务通常表比较少,列很......
  • MySQL数据库主从搭建(详细图文)
    文章目录前言一、主从搭建准备二、Master1.修改mysql配置文件2.创建授权用户3.查看日志和宿主机master的状态三、slave操作1.修改宿主机的server-id2.进入mysql执行相关命令3.UUID的相关配置四、测试前言主从原理:MySQL之间数据复制的基础是二进制日志文......
  • mysql记录多行结果的小实验
    通过#保存多个记录,比如,下线开始时间#下线多少天,下线结束时间如果想要做数据计算可以通过SUBSTRING_INDEX(offline_record,'#',3)拿到对应的结果。比如我要对比获取第三个的所有数据,现在时间是2023-06-1814:20:21超过这个时间的就要离线了。我要查询到所有的数据。SELECT*......