<返回更多

Mysql手写脚本实现插入百万级随机测试数据

2021-08-03    君子中带着点痞子气
加入收藏

要实现插入百万级随机数据需要依赖MySQL的函数和存储过程

下面先讲讲函数和存储的区别:

标识符不同

函数必须要有返回值,而过程没有返回值

过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在select中,必须将返回值赋给变量

函数可以在select语句中直接使用,而过程不能,函数是使用select调用,过程使用call调用

一. 新建两张表:

#员工表

create table emp(

id int unsigned primary key auto_increment,

ename varchar(20) not null default "",

age int not null default 18,

deptno mediumint unsigned not null default 0

)engine=innodb default charset=utf8mb4;

#部门表

create table dept(

id int unsigned primary key auto_increment,

deptno mediumint unsigned not null default 0,

dname varchar(20) not null default ""

)engine=innodb default charset=utf8mb4;

二. 编写函数实现数据的随机性:

#随机字母函数

delimiter $$

create function rand_string(n int) returns varchar(255)

begin

declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxvcbnm';

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()*26),1));

set i = i +1;

end while;

return return_str;

end $$

rand_string函数截取了n次chars_str的随机位数上的一位字符,并使用concat函数拼接到return_str(floor用来向下取整)

#随机数字函数

delimiter $$

create function rand_num() returns int(5)

begin

declare i int default 0;

set i = floor(rand()*10);

return i;

end $$

#随机年龄函数

delimiter $$

create function rand_age() returns int(5)

begin

declare i int default 0;

set i = floor(18+rand()*23);

return i;

end $$

这两个函数就不多赘述了

三.编写存储过程实现数据插入

#插入emp存储过程

delimiter $$

create procedure insert_emp(in start int(10),in max_num int(10))

begin

declare i int default 0;

set autocommit = 0;

repeat

set i = i + 1;

insert into emp(empno,ename,age,deptno) values((start+i),rand_string(6),rand_age(),rand_num());

until i = max_num

end repeat;

commit;

end $$

根据传入的start控制插入数据位置,max_num控制最大插入数据,插入时调用上面写的随机函数

#插入dept存储过程

delimiter $$

create procedure insert_dept(in start int(10),in max_num int(10))

begin

declare i int default 0;

set autocommit = 0;

repeat

set i = i + 1;

insert into dept(deptno,dname) values((start+i),rand_string(10));

until i = max_num

end repeat;

commit;

end $$

定义了函数或存储过程后记得deleimiter ; 把结束符改回 ;

接下来使用call [procedurename]调用存储过程就ok了,测试插入了100条emp和10条dept数据,就不插入太多了,感兴趣可以自己试试,下面是结果

Mysql手写脚本实现插入百万级随机测试数据

结果1


Mysql手写脚本实现插入百万级随机测试数据

结果2

原文链接:
https://blog.csdn.NET/qq_42654484/article/details/99618000

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>