为了测试,我必须插入1000000行相同的值。这是insert one row的查询。
insert into CRM_test.CRM_Pipeline(Name,BranchId,CreatedOn,CreatedFrom ) values("Pipeline1",1, now(),95);
有没有什么方法可以使用mysql在一个查询中插入1000000行?提前谢谢
pobjuy321#
我不知道这是否适用于1000000行,如果没有,您可以将该数字减少为较小的值,并多次运行查询。创建并执行此存储过程。
CREATE PROCEDURE addRows() BEGIN DECLARE i int DEFAULT 1; WHILE i <= 1000000 DO insert into CRM_test.CRM_Pipeline(Name,BranchId,CreatedOn,CreatedFrom ) values("Pipeline1",1, now(),95); SET i = i + 1; END WHILE; END
jv2fixgn2#
从理论上讲,通过 INSERT 声明。但实际上,你可能会受到 max_allowed_packet ,默认为1mb。一种选择是暂时增加 max_allowed_packet 一个可以支持插入一百万条记录的值。另一种方法是 LOAD DATA 包含您的数据的csv文件。不进行单个插入的一个动机是,考虑到插入的大小,如果插入在中间某个位置失败,例如由于网络问题,您可能会丢失整个事务,或者最终导致部分插入。因此,您可能希望将insert分解成更小的批,如果没有其他原因的话,只会使其更安全。
INSERT
max_allowed_packet
LOAD DATA
2条答案
按热度按时间pobjuy321#
我不知道这是否适用于1000000行,
如果没有,您可以将该数字减少为较小的值,并多次运行查询。
创建并执行此存储过程。
jv2fixgn2#
从理论上讲,通过
INSERT
声明。但实际上,你可能会受到max_allowed_packet
,默认为1mb。一种选择是暂时增加max_allowed_packet
一个可以支持插入一百万条记录的值。另一种方法是LOAD DATA
包含您的数据的csv文件。不进行单个插入的一个动机是,考虑到插入的大小,如果插入在中间某个位置失败,例如由于网络问题,您可能会丢失整个事务,或者最终导致部分插入。因此,您可能希望将insert分解成更小的批,如果没有其他原因的话,只会使其更安全。