mysql 创建测试大表

来源:互联网 发布:艺萌微信投票系统源码 编辑:程序博客网 时间:2024/06/14 17:38
<span style="background-color: rgb(51, 102, 102);"><span style="font-size:24px;"><span style="background-color: rgb(255, 255, 255);"><span style="color:#333333;"><span style="font-size:18px;">#创建表DEPTCREATE TABLE dept( /*部门表*/deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0, dname VARCHAR(20)  NOT NULL  DEFAULT "",loc VARCHAR(13) NOT NULL DEFAULT "") ENGINE=MyISAM DEFAULT CHARSET=utf8 ;#创建表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 ;#工资级别表CREATE TABLE salgrade(grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,losal DECIMAL(17,2)  NOT NULL,hisal DECIMAL(17,2)  NOT NULL)ENGINE=MyISAM DEFAULT CHARSET=utf8;INSERT INTO salgrade VALUES (1,700,1200);INSERT INTO salgrade VALUES (2,1201,1400);INSERT INTO salgrade VALUES (3,1401,2000);INSERT INTO salgrade VALUES (4,2001,3000);INSERT INTO salgrade VALUES (5,3001,9999);# 随机产生字符串#定义一个新的命令结束符合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);#**************************************************************#  向dept表中插入记录delimiter $$drop procedure insert_dept $$create procedure insert_dept(in start int(10),in max_num int(10))begindeclare i int default 0;  set autocommit = 0;   repeat set i = i + 1; insert into dept values ((start+i) ,rand_string(10),rand_string(8));  until i = max_num end repeat;   commit; end $$delimiter ;call insert_dept(100,10);#------------------------------------------------#向salgrade 表插入数据delimiter $$drop procedure insert_salgrade $$create procedure insert_salgrade(in start int(10),in max_num int(10))begindeclare i int default 0;  set autocommit = 0; ALTER TABLE emp DISABLE KEYS;   repeat set i = i + 1; insert into salgrade values ((start+i) ,(start+i),(start+i));  until i = max_num end repeat;   commit; end $$delimiter ;#测试不需要了#call insert_salgrade(10000,1000000);#----------------------------------------------</span></span></span></span></span>

0 0