创建一个测试表
CREATE TABLE `test_num` (
`id` bigint NOT NULL AUTO_INCREMENT,
`age` int DEFAULT NULL,
`rand_num` int DEFAULT NULL,
`big_num` bigint DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `rand_age` (`rand_num`,`age`)
) ENGINE=InnoDB AUTO_INCREMENT=56393373 DEFAULT CHARSET=utf8mb3;
创建一个随机生成内容的函数
生成小数字
CREATE FUNCTION `rand_min_num`() RETURNS int
begin
declare min_num INT(3);
SET min_num = floor(rand()*100);
return min_num;
end
生成大数字
CREATE FUNCTION `rand_max_num`() RETURNS bigint
begin
declare max_num BIGINT(10);
SET max_num = floor(rand()*100000);
return max_num;
end
生成随机字符
CREATE FUNCTION `rand_string`(n int) RETURNS varchar(255) CHARSET utf8mb3
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
创建存储过程并调用生成指定行数的数据
循环n(n为入参
)次,生成不同的数据,并插入数据库
CREATE PROCEDURE `insert_data_testnum`( IN n INT )
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE max_num BIGINT(10);
DECLARE rand_num BIGINT(10);
DECLARE min_num INT(5);
WHILE(i<= n ) DO
SET min_num = rand_min_num();
SET rand_num = rand_max_num();
SET max_num = rand_max_num();
--循环执行以下插入语句
INSERT INTO test_num ( age, rand_num,big_num ) VALUES(min_num,rand_num,max_num);
SET i = i + 1;
END WHILE;
END
由于我们的测试表字段都是数字类型,所以我们使用的随机数据都是随机数字。
调用存储过程
-- 插入一条测试数据
CALL insert_data_testnum(1)
再次查看数据库,则已经插入成功。可以尝试插入千万级数据,测试sql优化等等…