美文网首页
构建一个大表(400 万)

构建一个大表(400 万)

作者: 码农随想录 | 来源:发表于2018-12-31 20:11 被阅读18次
    #创建表DEPT
    CREATE 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 $$
    
    
    #随即添加雇员[光标]  400w
    create procedure insert_emp(in start int(10),in max_num int(10))
    begin
    declare 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))
    begin
    declare 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))
    begin
    declare 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);
    
    
    
    
    
    #----------------------------------------------
    
    
    

    相关文章

      网友评论

          本文标题:构建一个大表(400 万)

          本文链接:https://www.haomeiwen.com/subject/yevwlqtx.html