在开发过程,经常需要在数据库中生成大量的测试数据,这个时候,我们可以使用存储过程帮我们完成这项工作。
首先,我们建立一张测试表,例如t_user
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
下面,我么通过下面的存储过程来插入100万条数据。
delimiter $$
DROP PROCEDURE IF EXISTS proc_batch_insert;
CREATE PROCEDURE proc_batch_insert()
BEGIN
DECLARE pre_name BIGINT; #定义变量1
DECLARE ageVal INT; #定义变量2
DECLARE i INT; #定义变量3
SET pre_name=187635267; #定义值1 初始化
SET ageVal=100; #定义值2初始化
SET i=1; #定义值3初始化
WHILE i < 1000000 DO
INSERT INTO t_user(`name`,age,create_time,update_time) VALUES(CONCAT(pre_name,'@qq.com'),(ageVal+i)%30,NOW(),NOW()); #插入语句
SET pre_name=pre_name+100; #变量1+100
SET i=i+1; #变量3+1
END WHILE;
END $$
delimiter ;
call proc_batch_insert();
经过测试,插入1百万条数据,大约需要10分钟,如果表的字段更多,可能花费的时间更长。
网上有人说预先在程序里面生成数据,然后再通过客户端导入会更快。我尚未亲自实验,但是个人觉得不会有存储过程快,因为不管怎么样,最终执行的还是插入语句。