MySQL批量生成测试数据函数
1.临时设置允许创建函数系统参数
set global log_bin_trust_function_creators=TRUE;
2.创建测试数据库
create database mytest charset=utf8; use mytest;
3.创建数据表
CREATE TABLE `test1` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `user_id` VARCHAR (20) NOT NULL, `group_id` INT (11) NOT NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`), KEY `index_user_id` (`user_id`) USING HASH ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
4.创建随机字符串函数
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;
5.创建存储过程
delimiter $$ CREATE PROCEDURE `insert_data`(IN n int) BEGIN DECLARE i INT DEFAULT 1; WHILE (i <= n ) DO INSERT into test1 (user_id,group_id,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 100) ,now() ); set i=i+1; END WHILE; END $$ delimiter ;
6.调用存储过程, 插入数据
call insert_data(100000);
7.插入成功后, 可以快速创建其他数据表并插入大量数据
create table test2 engine=INNODB as select * from test1;