MySQL:批量插入数据

不知道 MySQL 有没有类似 PostgreSQL 的 generate_series () 函数,在生成测试数据时非常方便,不需要编写存储过程。这里记录下通过存储过程批量插入数据。

创建测试表

1
2
3
4
5
6
7
8
9
10
11
francs@localhost:francs>create table test_1(id int4 primary key, name ichar(32));  
Query OK, 0 rows affected (0.16 sec)

francs@localhost:francs>desc test_1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | ichar(32) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

批量插入数据存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER //   
CREATE PROCEDURE pro_insert()
BEGIN
DECLARE i INT;
SET i = 0;

WHILE i <= 10000 DO
insert into test_1(id, name ) values(i,CONCAT(ID,'_a'));
SET i = i + 1;
END WHILE;
END
//
DELIMITER ;

创建存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
francs@localhost:francs>DELIMITER //   
francs@localhost:francs>CREATE PROCEDURE pro_insert()
-> BEGIN
-> DECLARE i INT;
->SET i = 0;
->
->WHILE i <= 10000 DO
->insert into test_1(id, name ) values(i,CONCAT(ID,'_a'));
->SET i = i + 1;
-> END WHILE;
-> END
-> //
DELIMITER ;
Query OK, 0 rows affected (0.07 sec)

francs@localhost:francs> DELIMITER ;

备注: 这里使用了分隔符 delimiter,开始的时候将分隔符由分号改成 //,存储过程执行后,再将分隔符修改回来,稍微有点烦琐,但可以理解。

执行存储过程

1
2
francs@localhost:francs>call pro_insert();  
Query OK, 1 row affected (16.11 sec)

备注:插入一万条数据需要 16.11 秒,有点慢,与表上有 pk 有关系,同时 与MySQL 的参数没有优化有关。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/239597.html

(0)
上一篇 2022年2月12日
下一篇 2022年2月12日

相关推荐

发表回复

登录后才能评论