我有一个包含1500000条记录的数组,如下所示
Array = ["2","3","6","7","A5057",......]
我如何能够直接从我使用以下查询尝试的MySQL命令中将所有这些记录插入表中(只有一个字段(XXX_id))
INSERT INTO TABLE_NAME (XXX_id) VALUES (["2","3","6","7","A5057",......]);
如果我们必须从php脚本插入,毫无疑问我们可以关注this question表单社区。 p>
答案 0 :(得分:2)
答案 1 :(得分:1)
答案 2 :(得分:1)
将数组数据放入一个文件中,每行一个ID。然后,您可以使用LOAD DATA INFILE
:
LOAD DATA INFILE 'filename'
INTO TABLE table_name (XXX_id)
答案 3 :(得分:1)
您的查询应该是这样的:
INSERT INTO TABLE_NAME (XXX_id) VALUES (2),(3),(6),(7),(A5057),......;
但是你只需要一个Query即可插入大量的行。因此,它可能超出MySQL查询限制。对于MySQL,每个查询都受max_allowed_packet的限制。
1)在MySQL中执行以下命令以查看' max_allowed_packet'的默认值:
show variables like 'max_allowed_packet';
2)标准MySQL安装的默认值为1048576字节(1MB)。但是可以通过将更高的值设置为500MB或更高来增加这一点:
SET GLOBAL max_allowed_packet=524288000;
3)通过执行MySQL中的1)命令再次检查max_allowed_packet值。
希望这会对你有所帮助。
答案 4 :(得分:1)
我们可以使用LOAD DATA LOCAL INFILE
LOAD DATA LOCAL INFILE
'path/file.csv'
INTO TABLE giata_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
这将获取表中的所有记录,以确保表中的字段名称和csv文件中的标题匹配相同。
如果这对您没有用,那么您可以按照@Plotisateur和@Aiyaz khorajia的回答
INSERT INTO `TABLE_NAME`(`XXX_id`) VALUES (1),(2),(3),(4)
答案 5 :(得分:1)
实际上有两种方法可以做到这一点
1.LOAD INFILE
LOAD DATA LOCAL INFILE
'path/file.csv'
INTO TABLE giata_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
2.使用multi-row insert
INSERT INTO `TABLE_NAME`(`XXX_id`) VALUES (1),(2),(3),(4)
答案 6 :(得分:0)
$string = ' (" '.implode(' "),(" ',$array).' ") ';
$query = "INSERT INTO TABLE_NAME (XXX_id) VALUES {$string}";
IF you have large number of records, I would suggest you to make a bunch of 100-200 records and then insert:
for($i=0; $i<sizeof($array); $i++){
$string = $string==""?'('.$array[$i].')':$string.',('.$array[$i].')';
if($i % 100 == 0){
$query = INSERT INTO TABLE_NAME (XXX_id) VALUES ($string);
// execute the query
$string = "";
}
}
if($string != ""){
$query = INSERT INTO TABLE_NAME (XXX_id) VALUES ($string);
// execute the query
}
答案 7 :(得分:0)
在您的程序中执行以下操作以解决您的问题:
-- Temporary table to hold splited row value of string
drop temporary table if exists temp_convert;
create temporary table temp_convert(split_data varchar(2056) );
-- dynamic query to break comma separated string as rows and
insert into column
set @sql = concat("
insert into temp_convert (split_data)
values ('", replace(
( select group_concat(in_string) as converted_data), ",", "'),('"),"'
);"
);
prepare stmt1 from @sql;
execute stmt1;