一、概述
在一些实际的测试、运维过程中,往往需要向数据库插入大量数据,利用存储过程是一个不错的选择
本次采用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
BEGINDECLARE i INT DEFAULT 0;SET i= FLOOR(1+RAND()*100);RETURN i;
END $
DELIMITER ;
生成随机姓名(字符串)
DELIMITER $
CREATE FUNCTION rand_name(n INT) RETURNS VARCHAR(255)
BEGINDECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';DECLARE return_str VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 0;WHILE i<n DOSET 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))
BEGINDECLARE i INT DEFAULT 0;DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; START TRANSACTION;while i < max_num doinsert 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;