一、概述
在一些实际的测试、运维过程中,往往需要向数据库插入大量数据,利用存储过程是一个不错的选择
本次采用MySQL5.7,模拟实际批量插入1000w条随机数据
二、创建库
mysql -uroot -p密码
create database bigdata;
use bigdata
三、创建表
drop table if exists user;
create table user(
id int not null primary key auto_increment,
number int not null,
name varchar(20) not null
)engine=innodb default charset=utf8;
四、创建函数
生成随机学号
#用于随机产生学号
DELIMITER $
CREATE FUNCTION rand_number() RETURNS INT
BEGIN
DECLARE i INT DEFAULT 0;
SET i= FLOOR(1+RAND()*100);
RETURN i;
END $
DELIMITER ;
生成随机姓名(字符串)
DELIMITER $
CREATE FUNCTION rand_name(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
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()*52),1));
SET i=i+1;
END WHILE;
RETURN return_str;
END $
DELIMITER ;
五、创建存储过程
DELIMITER $
CREATE PROCEDURE insert_user(IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
while i < max_num do
insert into user(id,number,name) values(null,rand_number(),rand_name(5));
set i = i + 1;
END WHILE;
COMMIT;
END $
DELIMITER ;
六、调用
call insert_user(1000*10000);
七、查看
select count(*) from user;
select * from user;