利用存储过程构建大表(400w)

来源:互联网 发布:电脑网络钓鱼游戏 编辑:程序博客网 时间:2024/05/16 16:23

创建一张emp表,向里面insert 400w条数据

#创建表EMP雇员CREATE TABLE emp(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/hiredate DATE NOT NULL,/*入职时间*/sal DECIMAL(7,2)  NOT NULL,/*薪水*/comm DECIMAL(7,2) NOT NULL,/*红利*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;# 随机产生字符串#定义一个新的命令结束符合delimiter $$#删除自定的函数drop  function rand_string $$#这里我创建了一个函数. #rand_string(n INT) rand_string 是函数名 (n INT) //该函数接收一个整数create function rand_string(n INT) returns varchar(255) #该函数会返回一个字符串begin #chars_str定义一个变量 chars_str,类型是 varchar(100),默认值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; 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 $$delimiter ;select rand_string(6);# 随机产生部门编号delimiter $$drop  function rand_num $$#这里我们又自定了一个函数create function rand_num( )returns int(5)begin  declare i int default 0; set i = floor(10+rand()*500); return i;end $$delimiter ;select rand_num();#******************************************#向emp表中插入记录(海量的数据)delimiter $$drop procedure insert_emp $$#随即添加雇员[光标]  400wcreate procedure insert_emp(in start int(10),in max_num int(10))begindeclare i int default 0; #set autocommit =0 把autocommit设置成0 set autocommit = 0;   repeat set i = i + 1; insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());  until i = max_num end repeat;   commit; end $$delimiter ;#调用刚刚写好的函数, 1800000条记录,从100001号开始call insert_emp(100001,4000000);


0 0