在MySQL查询中插入数组中的记录

时间:2017-10-26 05:44:16

标签: mysql arrays

我有一个包含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表单社区。

8 个答案:

答案 0 :(得分:2)

您可以像这样创建数组格式

INSERT INTO `TABLE_NAME`(`XXX_id`) VALUES (1),(2),(3),(4)

Read more

答案 1 :(得分:1)

您可以使用multi-row insert来实现您的目标

使用PHP

将数组格式化为VALUES (X), (X), ...

答案 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_pa​​cket的限制。

1)在MySQL中执行以下命令以查看' max_allowed_pa​​cket'的默认值:

show variables like 'max_allowed_packet';

2)标准MySQL安装的默认值为1048576字节(1MB)。但是可以通过将更高的值设置为500MB或更高来增加这一点:

SET GLOBAL max_allowed_packet=524288000;

3)通过执行MySQL中的1)命令再次检查max_allowed_pa​​cket值。

希望这会对你有所帮助。

答案 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;
相关问题