问题:从我的仓库收到的CSV数据有超过200万个+号码需要导入[多列]表格中的[单一列]。我需要弄清楚如何将CSV文件导入MySQL,但有一些棘手的问题需要克服。经过一番研究,我还没有找到解决方案......
这些列可以如下布局:(此数据尚未存在于数据库中)
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。
答案 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解析功能。