用MYSQL的存儲過程創建百萬級測試數據表


  1. 創建隨機字符串函數,便於創建名稱

  2.  
    DROP function if EXISTS rand_string;
    #創建一個指定字符個數的函數
    create function rand_string(n INT)
    #返回字符串,注意:此處關鍵字是returns 而不是return
    returns varchar(255)
    BEGIN
        #定義一個臨時變量,給變量賦值'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
        DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        # 定義返回結果字符串
        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
    
    

    創建隨機編號生成函數

    drop function if exists rand_num;
    CREATE function rand_num()
    returns int(5)
    BEGIN
    	DECLARE i int default 0;
    	set i = FLOOR(10+RAND()*500);
    	return i;
    END
    
    
  3. 創建數據表 -- 部門表 dept

    drop table if EXISTS dept;
    create table dept (
    	deptno MEDIUMINT UNSIGNED not null DEFAULT 0,
      dname varchar(20) default '',
    	ioc varchar(13) default''
    ) ENGINE = myisam default CHARSET ='utf8';
    ALTER table dept add PRIMARY key(deptno);
    
    
  4. 創建數據表 -- 員工表 emp

    drop table if EXISTS emp;
    CREATE TABLE `emp` (
      `empno` mediumint(8) unsigned NOT NULL DEFAULT '0',
      `ename` varchar(20) NOT NULL DEFAULT '',
      `job` varchar(9) NOT NULL DEFAULT '',
      `mgr` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '上級編號',
      `hiredate` date NOT NULL COMMENT '入職日期',
      `salary` decimal(7,2) NOT NULL COMMENT '薪水',
      `comm` decimal(7,2) NOT NULL COMMENT '紅利',
      `deptno` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '部門編號'
    ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
    
    
  5. 創建插入測試數據的存儲過程

    drop PROCEDURE IF EXISTS insert_emp ;
     
    CREATE PROCEDURE insert_emp (in start_no int(10),in max_num int(10))
     
    BEGIN
    	DECLARE i int default 0;
    	# 設置自動提交為false
    	set autocommit =0;
    	# 開啟循環
    	REPEAT
    		set i = i+1;
    		insert into emp values((start_no+i),rand_string(6),'SALESMAN',0001,CURDATE(),rand_num(),400,0002);
    	
    	UNTIL i=max_num
    	END REPEAT;
    END
    
    
  6. 調用存儲過程,生成百萬數據

    call insert_emp(10000,10000000);
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM