使用存储过程将大量记录插入MySQL

时间:2018-03-27 09:03:09

标签: mysql

我有数百万条记录,我想将它们作为一些批次插入以提高速度。

我有一张表格如下:

CREATE TABLE `source_names` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `source_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `source_name_UNIQUE` (`source_name`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=latin1;

在一步中,我想在source_name中添加500 source_names,如下所示:

insert ignore into source_names (source_name) 
values ('a01'),('a02'),...,('a500')

到此为止没有问题。

Qt我有QString就是这样(当然IDE在这个问题上并不重要):

QString totalSourceNames="('a01'),('a02'),...,('a500')";

我希望通过source_names存储过程和这些命令将此QString插入insertPro表:

query.prepare("CALL insertPro(:source_names)");
query.bindValue(":source_names",totalSourceNames);
query.exec()

我的存储过程是:

CREATE DEFINER=`root`@`localhost` PROCEDURE `insertPro`(
IN source_names text
)
BEGIN
    insert ignore into source_names(source_name) values (source_names);
END

MySQL只插入一行,并将一个值中的所有500个值连接起来。我知道这是因为上面代码中values (...)前面的括号,但删除括号会在MySQL中出错。

如何使用存储过程插入500条记录?

0 个答案:

没有答案
相关问题