MYSQL用存储过程创建百万级测试数据表

1.创建随机字符串函数,便于创建名称

-- delimiter $$  
-- 执行出现“This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled  
-- (you *might* want to use the less safe log_bin_trust_function_creators variable)” 错误时需要先设置log_bin_trust_function_creators  
-- set global log_bin_trust_function_creators=1;  
  
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  


2.创建随机编号生成函数


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);  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值