大规模CSV到MySQL导入问题

时间:2011-05-04 18:07:44

标签: mysql csv import

问题:从我的仓库收到的CSV数据有超过200万个+号码需要导入[多列]表格中的[单一列]。我需要弄清楚如何将CSV文件导入MySQL,但有一些棘手的问题需要克服。经过一番研究,我还没有找到解决方案......

这些列可以如下布局:(此数据尚未存在于数据库中)

  • id:自动增加值
  • serialCode:值来自CSV
  • somethingID:分配给另一个表ID值

     ID  | serialCode | somethingID 
    --------------------------------
      1  |  1234567   |      42    
      2  |  2345678   |      21  
      3  |  3456789   |      14  
    

200万+序列号来自我,如下面的示例格式。每个数字都是一个单独的serialCode,用逗号分隔,一行有4个serialCodes。

7121316,8216697,5146909,5191409,
8125250,6217542,5144896,8198066,
3125654,9217139,2146880,1192013

我需要做什么是将这些序列码插入MySQL数据库,特别是插入到serialCode列中。 ID将自动递增,并且将在以后分配somethingID。

3 个答案:

答案 0 :(得分:3)

MySQL的LOAD DATA INFILE命令将成为您的朋友:http://dev.mysql.com/doc/refman/5.5/en/load-data.html

首先创建表,然后我认为以下命令应该有效:

LOAD DATA INFILE "/path/to/file" INTO TABLE myTable LINES TERMINATED BY "," (serialCode) SET ID=NULL;

答案 1 :(得分:2)

您可以使用LOAD DATA INFILE。棘手的部分是你的行终结符有时是一个逗号,但有时它是逗号和换行符。

最简单的方法是将值加载到用户变量中,然后在表中设置实际列变量时从用户变量中删除换行符。

这样的事情对你有用:

LOAD DATA INFILE '/tmp/your_file.csv'
INTO TABLE your_table
LINES TERMINATED BY ','
(@serialCode)
SET id = NULL,
   serialCode = REPLACE(@serialCode,'\n','');

答案 2 :(得分:0)

如果mysql工具因任何原因(内存限制,编码问题,无效的csv)而失败,您始终可以选择使用首选编程语言编写脚本,以便将csv的内容解析并存储到数据库中。大多数编程语言都具有csv解析功能。