我有数百万条记录,我想将它们作为一些批次插入以提高速度。
我有一张表格如下:
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条记录?