构建测试数据,一般可以写py脚本,也可以在应用项目中使用连接池构建测试数据。
但是我感觉以上的方法可能很高效,但不一定方便。需要配置连接,编写调用逻辑等。
如果你不在乎速度,只求便捷,那么我建议可以采用sql自带的存储过程来完成。
1.新建表测试表sys_user
CREATE TABLE `sys_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
`salt` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盐',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2769446 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户测试表'
2.开启存储函数信任
set global log_bin_trust_function_creators=1;
3.执行随机字符函数
delimiter $$
CREATE FUNCTION rand_string(n int) RETURNS varchar(255)
begin
declare chars_str varchar(100)
default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
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()*62),1));
set i= i+1;
end while;
return return_str;
end $$
delimiter ;
4.执行插入函数
delimiter $$
CREATE PROCEDURE `insert_data`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO
INSERT into sys_user (username,password,salt ) VALUEs (rand_string(8),rand_string(16),rand_string(16) );
set i=i+1;
END WHILE;
END $$
delimiter ;
5.调用运行,插入100w测试数据
call insert_data(1000000);
最后,喝杯咖啡,稍等片刻,百万数据就造好了。实测大概需要8分钟左右。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名,转载请标明出处
最后编辑时间为:
2020-01-01