背景介绍

最近在压测,想生成带有userId的的两万条用户数据,将userId控制在八位即可,运用存储过程实现,记录过程,方便查看。

第一步、创建简单的用户表

创建表脚本如下所示。

// 存在则删除
DROP TABLE IF EXISTS `t_user_info`;
// 创建表t_user_info脚本
CREATE TABLE `t_user_info`  (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', 
    `user_id` varchar(64) DEFAULT NULL COMMENT '用户ID',
    `user_type` varchar(64)  DEFAULT NULL COMMENT '用户说明',  
    `address` varchar(255) DEFAULT NULL COMMENT '地址',  
    `mobile` varchar(255) DEFAULT NULL COMMENT '手机号',  
    `filed1` varchar(255)  DEFAULT NULL COMMENT '字段1',  
    `filed2` varchar(255)  DEFAULT NULL COMMENT '字段2',  
    `filed3` varchar(255)  DEFAULT NULL COMMENT '字段3',  
    `filed4` varchar(255)  DEFAULT NULL COMMENT '字段4',  
    `filed5` varchar(255)  DEFAULT NULL COMMENT '字段5',  
    `filed6` varchar(255)  DEFAULT NULL COMMENT '字段6',  
    `filed7` varchar(255)  DEFAULT NULL COMMENT '字段7',  
    `filed8` varchar(255)  DEFAULT NULL COMMENT '字段8',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB 
CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ;
第二步、创建存储过程

mysql 中循环可用存储过程实现,具体可参考以下脚本。

-- 开始标识
DELIMITER ;;
-- 存储过程存在则删除 DROP PROCEDURE
drop PROCEDURE IF EXISTS batch_insert_user_info ; 
-- 创建存储过程 - batch_insert_user_info 
CREATE PROCEDURE batch_insert_user_info(num int)
BEGIN
DECLARE i INT DEFAULT 1 ;
-- 初始化userId为八位
DECLARE userId INT DEFAULT 10000000 ;
-- 构造插入的SQL
SET @execSql = 'INSERT INTO `t_user_info`(`user_id`, `user_type`, `address`,`mobile`,`filed1`, `filed2`, 
`filed3`,`filed4`, `filed5`, `filed6`, `filed7`, `filed8`) VALUES' ;
-- 定义待之行SQL变量
SET @execSQL = '' ;
-- 循环
WHILE i <= num DO
-- 定义变量
SET @address = "'地址为北京市海淀区中关村大街'" ;
SET @mobile = "'15012345678'" ;
SET @filed = "'春天到了,阳光正好,适合出去踏青游玩!'" ;
SET @execSQL = concat(@execData,"(",userId + i,", '注册用户'",",",@address,",",@mobile,",",@filed,",",@filed,",",@filed,
",",@filed,",",@filed,",",@filed,",",@filed,",",@filed,")"
) ;
IF i % 1000 = 0 THEN
-- 拼接SQL
SET @stmtSql = concat(@execSql, @execData, ";") ; 
PREPARE stmt
FROM
	@stmtSql ; 
-- 执行
EXECUTE stmt ; 
-- 引用预处理
DEALLOCATE PREPARE stmt ; 
COMMIT ;
	SET @execSQL = "" ;
ELSE
	SET @execSQL = concat(@execSQL, ",") ;
END
IF ;
	SET i = i + 1 ;
END
	WHILE ;
END;;
DELIMITER ;
第三步、执行存储过程并查看

调用存储过程,用 ==call 命令==,入参是要生成的条数。


call batch_insert_user_info (20000)

两万条执行时间11.4秒,速度还是挺快的。 在这里插入图片描述 这样数据就构建成功了,查看表中数据。 在这里插入图片描述 以上只是简单的demo,可根据实际需要改写,祝好!