要实现插入百万级随机数据需要依赖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数据,就不插入太多了,感兴趣可以自己试试,下面是结果
结果1
结果2
原文链接:
https://blog.csdn.net/qq_42654484/article/details/99618000