MySQL - 使用存储过程快速制造大量测试数据

  Java Web 项目开发,有时需要测试代码操作数据库的性能,往往需要大量的测试数据。编造大量测试数据,有多种方法,如 Java 多线程插入数据,Jmeter 发包工具插入数据,导入 excel 文件数据等等。笔者经常使用的一种方法是,用 MySQL 存储过程制造测试数据,以下做个简单总结。
  以 MySQL 数据库表 tbl_mgm_menu 为例,其建表语句如下。

DROP TABLE IF EXISTS `tbl_mgm_menu`;
CREATE TABLE `tbl_mgm_menu` (
  `menu_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '菜单主键',
  `menu_name` varchar(30) NOT NULL DEFAULT '' COMMENT '菜单名称',
  `menu_logo` varchar(64) NOT NULL DEFAULT '' COMMENT '菜单logo',
  `menu_url` varchar(64) NOT NULL DEFAULT '' COMMENT '菜单url',
  `menu_seq` int(2) NOT NULL DEFAULT '0' COMMENT '菜单顺序',
  `rec_st` char(1) NOT NULL DEFAULT '1' COMMENT '记录状态,0:无效;1:有效',
  `rec_crt_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `rec_upd_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;

  完整过程如下:

  1. 清空表数据;
  2. 创建存储过程,命名为 myproc,具体作用是向表格中循环插入 1000 条数据。如果需要更多的数据,修改 while 循环终止数值即可;
  3. 调用存储过程。

  SQL 语句如下所示。

TRUNCATE TABLE tbl_mgm_menu ;

DROP PROCEDURE IF EXISTS myproc ;


DELIMITER //

CREATE PROCEDURE myproc () 
BEGIN
  DECLARE num INT ;
  SET num = 1 ;
  
  WHILE
    num < 1001 DO 
    INSERT INTO tbl_mgm_menu (
      menu_name,
      menu_logo,
      menu_url,
      menu_seq,
      rec_st
    ) 
    VALUES
      (
        CONCAT('name', CAST(num AS CHAR)),
        CONCAT('logo', CAST(num AS CHAR)),
        CONCAT('/url', CAST(num AS CHAR)),
        num,
        "1"
      ) ;
    SET num = num + 1 ;
    
  END WHILE ;
  
END //

CALL myproc () ;

  本机 windows 环境下,调用存储过程执行一次, 执行结果如下。

共 1 行受到影响
执行耗时 : 40.051 sec
传送时间 : 0 sec
总耗时 : 40.052 sec

  制造完数据后,表格数据如下所示(仅展示部分数据)。
MySQL - 使用存储过程快速制造大量测试数据_第1张图片
  至此,使用 MySQL 存储过程制造数据完成。

你可能感兴趣的:(MySQL,mysql)