在Mysql数据库中上传批量数据

时间:2013-11-19 07:09:53

标签: php mysql

我正在上传mysql数据库中的批量数据需要1小时才能上传50000 md5

我想节省上传时间;

我使用(<input type='file' />)

按csv文件上传数据

3 个答案:

答案 0 :(得分:0)

参考。链接Mysql CSV load infile

你可以试试这个例子

$sql = 'LOAD DATA LOCAL INFILE "../csvtemp/test.csv" 
        INTO TABLE sample 
            FIELDS TERMINATED BY "," 
            OPTIONALLY ENCLOSED BY """" 
            IGNORE 1 LINES
            (col1, col2, col3, col4, col5, col6, col7, col8, col9)'
;

缺少的列将被赋予其DEFAULT值,否则您可以这样指定固定值:

$sql = 'LOAD DATA LOCAL INFILE "../csvtemp/test.csv" 
        INTO TABLE sample 
            FIELDS TERMINATED BY "," 
            OPTIONALLY ENCLOSED BY """" 
            IGNORE 1 LINES
            (col1, col2, col3, col4, col5, col6, col7, col8, col9)'
            SET col10 = 'abc', col11 = 'xyz'
;

答案 1 :(得分:0)

我找到了问题的解决方案。  我通过动态查询在mysql数据库中快速开发插入批量数据的代码

在开发此查询之前,我在1小时内插入50000 md5但在开发此查询后需要1-2秒。    这是我的代码。

 <?php 
if(isset($_REQUEST['uploadinvalid'])) // button name
{
$file_name=$_FILES['file']['name'];    
$temp=$_FILES['file']['tmp_name'];
$type=$_FILES["file"]["type"];
$error=$_FILES["file"]["error"];
$size=$_FILES["file"]["size"];
if(is_uploaded_file($_FILES['file']['tmp_name']))
{
$server="localhost";
$user="root";
$password="vaibhav123";
$database="userinfo";
$cid=mysql_connect($server,$user,$password) or die("Try Again");
mysql_select_db($database,$cid);
 $handle = fopen($_FILES['file']['tmp_name'], "r");
  $fst="yes"; 
  $query="insert into username (name) values "; // predefine query
  $count=0; // counter for count how much values have been added 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
    $count++;
   $name=md5(trim($data[0]));
    if($fst=='yes') // check if fst== yes then don't use (,) comma
    {
    $fst="no";
    $query.="('$name')";  // append value with predefine query if first time append don't use  (,) comma
    }
    else
    $query.=",('$name')";   // append value and  use  (,) comma
    if($count==30000) //if counter==30000 query will execute         
   {
    mysql_query($query,$cid);
   $fst="yes";  //set fst=yes after execute query
    $query="";   //set query="" after execute query
    $count=0;     //set count=0 after execute query
   } 
    }
    mysql_query($query,$cid);  //execute query for remain values
    mysql_close($cid);
}
}
?>

答案 2 :(得分:-1)

如果您使用PhpMyadmin,那么您可以尝试使用第一个选项,否则您可以使用“ BigDump: Staggered MySQL Dump Importer“导入大型和非常大的MySQL Dumps

第一个选项

  

当尝试使用phpmyadmin将大型SQL文件导入mysql时,   phpmyadmin文档提供了一些解决方案,但我找到了   最简单的方法就是......

     

找到位于phpmyadmin目录中的config.inc.php文件。在   我的情况就在这里:

     
      
  1. C:\瓦帕\ APPS \ phpmyadmin3.2.0.1 \的config.inc.php
  2.         

    在其上找到包含$ cfg ['UploadDir']的行并将其更新为:

         
        
    1. $ cfg ['UploadDir'] ='upload';
    2.         

      在phpmyadmin目录中创建一个名为“upload”的目录。

           
          
      1. C:\瓦帕\ APPS \ phpmyadmin3.2.0.1 \上传\
      2.         

        然后将您要导入的大型sql文件放入   新的上传目录。现在,当你进入db导入页面时   phpmyadmin控制台你会注意到一个没有的下拉礼物   之前 - 它包含上传中的所有sql文件   您刚刚创建的目录。您现在可以选择此选项   开始导入。

             

        如果你没有在Windows上使用WAMP,那么我相信你能够   适应环境而不会有太多麻烦。