Mysql插入大量随机数据
Posted 一品数据邦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql插入大量随机数据相关的知识,希望对你有一定的参考价值。
有时出于学习和测试的目的,我们往往需要在表中插入大量随机数据。
以下例子是在网上查阅了大量资料后,借鉴并修改过的。并已实践过是可行的,可放心使用。
先创建数据库
create database mytest;
再定义两张表
create table company(
id int unsigned primary key auto_increment,
companyid mediumint unsigned not null default 0,
companyname varchar(30) not null default "",
location varchar(20) not null default ""
)engine=innodb default charset=utf8;
create table personalinfo(
id int unsigned primary key auto_increment,
personalid mediumint unsigned not null default 0,
personalname varchar(20) not null default "",
job varchar(9) not null default "",
manager mediumint unsigned not null default 0,
enterdate date not null,
salary decimal(7,2) not null,
comm decimal(7,2) not null,
companyid mediumint unsigned not null default 0
)engine=innodb default charset=utf8;
由于需要在库中创建函数,我们需要设定一个参数
set global log_bin_trust_function_creators=ON;
创建如下两个函数:
delimiter |
create function rdm_str(n int) returns varchar(300) -----------产生指定长度的随机字符
begin
declare base_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
declare ret_str varchar(300) default '';
declare i int default 0;
while i < n do
set ret_str = concat(ret_str,substring(base_str,floor(1 +rand()*62),1));
set i = i + 1;
end while;
return ret_str;
end |
delimiter |
create function rdm_nb() returns int(8) -----------产生随机数字
begin
declare i int default 0;
set i = floor(10000 +rand()*20);
return i;
end |
再创建两个存储过程(进行数据插入)
delimiter |
create procedure inst_company(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 company(companyid,companyname,location) values ((start+i),rdm_str(20),rdm_str(16));
until i=max_num
end repeat;
commit;
end |
delimiter |
create procedure inst_personal(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 personalinfo(personalid,personalname,job,manager,enterdate,salary,comm,companyid) values ((start+i),rdm_str(12),'salesman',0001,curdate(),2000,400,rdm_nb());
until i=max_num
end repeat;
commit;
end |
以上都做完后,我们接着就是调用这些存储过程。
首先将分隔符恢复为;
delimiter ;
插入20条公司数据
call inst_company(10000,20);
插入个人数据(40万条)
call inst_personal(100001,500000);
以上是关于Mysql插入大量随机数据的主要内容,如果未能解决你的问题,请参考以下文章