MySQL批量插入测试数据。在开发过程,经常需要在数据库中生成大量的测试数据,这个时候,我们可以使用存储过程帮我们完成这项工作。
首先,我们建立一张测试表,例如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;
下面,我么通过下面的存储过程来插入1000万条数据。
delimiter $$DROP PROCEDURE IF EXISTS proc_batch_insert;CREATE PROCEDURE proc_batch_insert()BEGINDECLARE pre_name BIGINT;DECLARE ageval INT;DECLARE i INT;SET pre_name=187635267;SET ageval=100;SET i=1;WHILE i < 1000000 DOINSERT INTO t_user(`name`,age,phone,create_time,update_time) VALUES(ConCAT(pre_name,'@qq'),(ageval+1)%30,NOW(),NOW());SET pre_name=pre_name+100;SET i=i+1;END WHILE;END $$delimiter ;call proc_batch_insert();
经过测试,插入1百万条数据,大约需要10分钟,如果表的字段更多,可能花费的时间更长。
网上有人说预先在程序里面生成数据,然后再通过客户端导入会更快。我尚未亲自实验,但是个人觉得不会有存储过程快,因为不管怎么样,最终执行的还是插入语句。
插入后的数据预览: