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

转载于:https://www.cnblogs.com/peterpoker/p/9758103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值