欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-16 13:47:28
...

  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 - 使用存储过程快速制造大量测试数据
  至此,使用 MySQL 存储过程制造数据完成。

相关标签: MySQL mysql